社区讨论
样例输出22玄关
P1896[SCOI2005] 互不侵犯参与者 2已保存回复 14
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 13 条
- 当前快照
- 1 份
- 快照标识符
- @mj766yjp
- 此快照首次捕获于
- 2025/12/15 21:09 3 个月前
- 此快照最后确认于
- 2025/12/18 21:45 3 个月前
CPP
#include <bits/stdc++.h>
using namespace std;
int n,k,good[1<<10],dp[10][100][1<<10],cnt,bin[1<<10];
long long ans=0;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
cin>>n>>k;
for(int i=0;i<(1<<n);i++){
bin[i]=__builtin_popcount(i);
if((i&(i<<1)&(i>>1))==0){
good[++cnt]=i;
}
}
dp[0][0][0]=1;
for(int i=1;i<=n;i++){//第i行
for(int j=1;j<=cnt;j++){//这行状态
int st=good[j];
for(int t=1;t<=cnt;t++){//上行状态
int sta=good[t];
if(((sta>>1)|sta|(sta<<1))&st) continue;
for(int sum=bin[st];sum<=k;sum++){
dp[i][sum][st]+=dp[i-1][sum-bin[st]][sta];
}
}
}
}
for(int i=1;i<=cnt;i++){
ans+=dp[n][k][good[i]];
}
cout<<ans;
return 0;
}
回复
共 14 条回复,欢迎继续交流。
正在加载回复...