社区讨论

代码RE求助

P3226[HNOI2012] 集合选数参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lwj408f1
此快照首次捕获于
2024/05/23 18:27
2 年前
此快照最后确认于
2024/05/23 20:28
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll modd=1e9+1;

int n;
ll ans=1,dp[16][1<<13];

void init()
{
	for(int i=0;i<16;i++)  for(int j=0;j<(1<<13);j++)  dp[i][j]=0LL;
	return;
}

void add(ll &x,ll y)
{
	x+=y;
	if(x>modd)  x-=modd;
	return;
}

void dfs(int i,int x,int j,int nex,int now)
{
	if(x>n)  {add(dp[i+1][nex],dp[i][now]);return;}
	dfs(i,x*3,j+1,nex,now);
	if((nex&(1<<(j-1)))==0&&(now&(1<<j))==0)  dfs(i,x*3,j+1,nex|(1<<j),now);
	return;
}

int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)  if(i%2!=0&&i%3!=0)
	{
		init();
		dp[0][0]=1;
		ll j=i;int ii=0;
		for(;j<=n;ii++,j*=2LL)  for(int k=0;k<(1<<13);k++)  if((k&(k<<1))==0)
			dfs(ii,j,1,0,k);
		ll sum=0;
		for(int k=0;k<(1<<13);k++)  if((k&(k<<1))==0)  add(sum,dp[ii][k]);
		ans*=sum;ans%=modd;
	}
	cout<<ans;
	return 0;
} 
RE了两个点,哪位大佬帮我看看哪里错了。

回复

1 条回复,欢迎继续交流。

正在加载回复...