骑士
来源:互联网 发布:windows 域控 编辑:程序博客网 时间:2024/06/10 06:32
问题描述 Problem Description
国际象棋中骑士的移动规则和中国象棋中的马是类似的, 它先沿着一个方向移动两格,再沿着与刚才移动方向垂直的方向移动一格。 路径上的棋子并不会影响骑士的移动,但是如果一个骑士走到了一个放有棋子的格子,它就会攻击那个棋子。 现在有一个
输入描述 Input Description
一行: 两个整数,
输出描述 Output Description
一行: 一个整数,为摆放的方式数
输入样例 Sample Input
[1]
3 2
[2]
4 4
样例输出 Sample Output
[1]
28
[2]
412
数据范围及提示 Data Size & Hint
分析 Code
状态压缩,记
代码 Code
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;bool link1[1<<8][1<<8];bool link2[1<<8][1<<8];LL f[9][33][1<<8][1<<8];int cnts[1<<8];int n,m;int cnt(int);bool check1(int,int);bool check2(int,int);int main(){ scanf("%d%d",&n,&m); if(m > 32){ printf("0"); return 0; } for(int i=0;i<(1<<n);++i) cnts[i] = cnt(i); for(int i=0;i<(1<<n);++i) for(int j=i;j<(1<<n);++j){ link1[j][i] = link1[i][j] = check1(i,j); link2[j][i] = link2[i][j] = check2(i,j); } f[0][0][0][0] = 1; for(int i=0;i<n;++i) for(int j=0;j<=m;++j) for(int k=0;k<(1<<n);++k) for(int l=0;l<(1<<n);++l) if(f[i][j][k][l]) for(int r=0;r<(1<<n);++r) if(link1[l][r] && link2[k][r] && j+cnts[r]<=m) f[i+1][j+cnts[r]][l][r] += f[i][j][k][l]; LL ans = 0; for(int i=0;i<(1<<n);++i) for(int j=0;j<(1<<n);++j) ans += f[n][m][i][j]; printf("%lld\n",ans); return 0;}int cnt(int x){ int ans = 0; while(x){ x -= x&-x; ++ans; } return ans;}bool check1(int i,int j){ int k; while(i){ k = i&-i; if(j&(k<<2) || j&(k>>2)) return false; i -= k; } return true;}bool check2(int i,int j){ int k; while(i){ k = i&-i; if(j&(k<<1) || j&(k>>1)) return false; i -= k; } return true;}
0 0
- 骑士
- 骑士
- 骑士
- 骑士
- 骑士与骑士精神
- 青铜骑士
- 盔甲骑士
- 骑士问题
- 骑士精神
- 盔甲骑士
- 骑士巡游
- 克里夫兰骑士
- 骑士漫游
- 骑士征程
- [作业]骑士
- 骑士旅游
- 骑士周游
- 愁容骑士
- 控件使用-注意事项罗列
- Solr6+Suggest(提示)
- Out of memory CheckErrorStatus(Int32 status)
- HDOJ_Easier Done Than Said
- JavaScript Promise 实现(三)
- 骑士
- Qt之QFileIconProvider(根据扩展名获取文件图标、类型)
- 马特-福特无奈为何外界对卡特勒评价糟糕
- jQuery获取Select选中的Text和Value,根据Value值动态添加属性等
- 使用ant打包android生成apk文件
- org.springframework.beans.MethodInvocationException: Property 'cacheManager' threw exception; neste
- hdu5319(模拟)
- C++轻量级界面库DuiLib简介(二)—使用DuiLib
- 802.11N blockACK