社区讨论
代码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 条回复,欢迎继续交流。
正在加载回复...