2.20 鲜花
【数据删除】被收了,原因:大义灭亲
丁真的七杀是永远的神
开状压了
但是讲解视频的模糊程度和二十年前的电视剧不相上下
状压模板
状态转移方程为 (sit[j]&sit_[x]==0)&&((sit[j]<<1)&sit[x]==0)&&(sit_[j]&(sit[x]}<<1)==0)
。
,
先预处理出每一行合法的情况
然后枚举,判断是否合法就行了
点击查看代码
#include <bits/stdc++.h>
using namespace std;
long long ans;
long long sta[2005], sit[2005], dp[15][2005][105];
int n, k, cnt;
void dfs(int x,int w,int num){
if(x>=n){
sit[++cnt]=w;
sta[cnt]=num;
return ;
}
dfs(x+1,w,num);
dfs(x+2,w+(1<<x),num+1);
}
// void dfs(int x, int num, int cur) {
// if (cur >= n) { // 有新的合法状态
// sit[++cnt] = x;
// sta[cnt] = num;
// return;
// }
// dfs(x, num, cur + 1); // cur位置不放国王
// dfs(x + (1 << cur), num + 1,
// cur + 2); // cur位置放国王,与它相邻的位置不能再放国王
// }
bool check(int x,int y){
if(sit[x]&sit[y])return 0;
if((sit[x]<<1)&sit[y])return 0;
if(sit[x]&(sit[y]<<1))return 0;
return 1;
}
int main(){
cin>>n>>k;
dfs(0,0,0);
for(int i=1;i<=cnt;i++){
dp[1][i][sta[i]]=1;
}
for(int i=2;i<=n;i++)
for(int j=1;j<=cnt;j++)
for(int m=1;m<=cnt;m++){
if(!check(j,m))continue;
for(int l=sta[j];l<=k;l++)dp[i][j][l]+=dp[i-1][m][l-sta[j]];
}
for(int i=1;i<=cnt;i++)ans+=dp[n][i][k];
cout<<ans<<endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本