思路

容易发现只能在轮廓线的拐点处落子,所以棋盘的状态可以用一个n+m长度的二进制数表示

转移就是10变成01

代码

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <map>
// #define int long long
using namespace std;
int A[20][20],B[20][20],n,m;
//map<int,int> M,vis;
int M[(1<<21)],vis[(1<<21)];
void print(int x){
for(int i=n+m-1;i>=0;i--)
printf("%d",(x>>i)&1);
putchar('\n');
}
int dfs(int state,int which){//0 feifei 1 niuniu
// print(state);
// printf("which:%d\n",which);
// getchar();
if(vis[state]){
// printf("req=%d\n",M[state]);
return M[state];
}
vis[state]=true;
int x=m,y=0;
int mid;
if(!which)
mid=-0x3f3f3f3f3f3f3f3fLL;
else
mid=0x3f3f3f3f3f3f3f3fLL;
for(int i=0;i<n+m;i++){
if((i+1)<n+m&&((state>>i)&1)==0&&((state>>(i+1))&1)==1){
// printf("y=%d x=%d\n",y+1,x);
int to=state^(3<<i);
if(!which)
mid=max(mid,dfs(to,which^1)+A[y+1][x]);
else
mid=min(mid,dfs(to,which^1)-B[y+1][x]);
// printf("mid=%d\n",mid);
}
if((state>>i)&1)
y++;
else
x--;
}
M[state]=mid;
// printf("req=%d\n",M[state]);
return mid;
}
signed main(){
// freopen("test.in","r",stdin);
scanf("%d %d",&n,&m);
// int t=clock();
int st=(((1<<(n))-1)<<m),end=(1<<n)-1;
// print(st);
// print(end);
vis[end]=true;
M[end]=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%d",&A[i][j]);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%d",&B[i][j]);
}
}
printf("%d\n",dfs(st,0));
// printf("time=%lf\n",1.0*(clock()-t)/CLOCKS_PER_SEC);
return 0;
}

最新文章

  1. Oracle架构设计01:表空间的管理维护规范
  2. ubuntu 安装 phpmyadmin
  3. HDU1257
  4. ArcServer 10.0 &ldquo;No Content&rdquo;、&ldquo;Server Host Cannot be null&rdquo; 错误
  5. 《JavaScript Ninja》之正则表达式
  6. cocos2dx js文件加密为jsc文件
  7. HDOJ/HDU 2564 词组缩写(单词缩写)
  8. 在mysql中修改表名的sql语句
  9. C++编程规范之12:懂得何时和如何进行并发性编程
  10. 基于drools创建自己的关系操作符
  11. Java获取当前日期的前一个月,前一天的时间
  12. 基于Ajax的长轮询(long-polling)方式
  13. AI 人工智能 探索 (一)
  14. MySQL生产库全库备份脚本
  15. IDEA SpringBoot多模块项目搭建详细过程(转)
  16. mysql 开发基础系列12 选择合适的数据类型(上)
  17. 图像边缘检测——几种图像边缘检测算子的学习及python 实现
  18. KVM 虚拟化技术
  19. PROFIBUS-DP现场总线的结构及应用
  20. [C#] 实现可设置超时的 Task

热门文章

  1. Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现
  2. 运用kNN算法识别潜在续费商家
  3. jsp无法访问
  4. Linux 用户管理【UID和GID】
  5. 安装启动kafka
  6. Zynq ZC706 传统方式移植Linux -- 编译kernel 文件系统 devicetree
  7. 论文翻译——Rapid 2D-to-3D conversion——快速2D到3D转换
  8. AdminLTE模板使用
  9. mysql 汇总
  10. 深入理解softmax函数