SGU 223 Little Kings (状压dp)
来源:互联网 发布:傲剑坐骑升级数据大全 编辑:程序博客网 时间:2024/04/28 15:48
题意:给出n*n的矩形,问放k个互不攻击的king的方案数。
思路:一行一行放,将会被攻击的格子用1表示,否则用0表示,由于攻击是相互的,因此只要保证自己不被攻击即可。然后就dfs枚举下方案数。。。在学校机房写的,只有Vc6.0,现在已经不会用了
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<string>using namespace std;const int maxn=11;typedef long long ll;ll dp[maxn][maxn*maxn][1<<10];int n,k;inline bool check(int s,int p){return !(s&(1<<p));}void dfs(int line,int p,int st,int snext,int cnt,ll val){if(p==n){dp[line+1][cnt][snext]+=val;return ;}dfs(line,p+1,st,snext,cnt,val);if(check(st,p)&&cnt<k){int state=1<<p;if(p>0) state|=1<<(p-1);if(p<n-1) state|=1<<(p+1);dfs(line,p+1,st|state,snext|state,cnt+1,val);}}int main(){while(cin>>n>>k){memset(dp,0,sizeof(dp));dp[0][0][0]=1;for(int i=0;i<n;++i)for(int j=0;j<=k;++j)for(int x=0;x<(1<<n);++x)if(dp[i][j][x]) dfs(i,0,x,0,j,dp[i][j][x]);ll ans=0;for(int y=0;y<(1<<n);++y)ans+=dp[n][k][y];//printf("%I64d\n",ans);cout<<ans<<endl;}return 0;}
0 0
- [SGU 223]Little Kings(状压DP)
- SGU 223 Little Kings (状压dp)
- SGU 223 little kings BSOJ2772 状压DP
- sgu 223 Little Kings 状态压缩dp
- sgu 223 - Little Kings 状态压缩DP
- SGU 223 Little Kings
- SGU 223 Little Kings
- SGU 223 Little Kings
- SGU 223 Little Kings
- sgu-223 Little Kings
- SGU 223 Little Kings
- [SGU 223][bsoj2772] little kings
- SGU 223. Little Kings
- sgu223 Little Kings 状压DP
- sgu223:Little Kings(状压DP)
- SGU——223. Little Kings
- SGU 220 Little Bishops(状压dp)
- 【状压DP】【cofun1376】kings
- OnCreate和PreSubclassWindow摘录
- Android PopupWindow 实例
- 书籍推荐汇总
- php 实现串查找Horspool
- 乘法逆元
- SGU 223 Little Kings (状压dp)
- HDU1114 Piggy-Bank 完全背包
- C# string类型转换成 指针类型或者句柄
- 关于ThreadLocal的使用
- TextView属性大全
- 从奶茶恋看刘强东马云气质之不同
- 【amazing cocos2d-x 3.0之二十】游戏存档之CCUserDefault,XML
- Cocoa中KVO的简单用法
- PHP魔法引用magic_quotes_gpc和magic_quotes_runtime