HDU - 1565 方格取数(1) 状压DP
2016-06-07 20:43
267 查看
Description
给你一个n*n的格子的棋盘,每个格子里面有一个非负数。
从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的和最大。
Input
包括多个测试实例,每个测试实例包括一个整数n 和n*n个非负数(n<=20)
Output
对于每个测试实例,输出可能取得的最大的和
Sample Input
3
75 15 21
75 15 28
34 70 5
Sample Output
188
Source
Happy 2007
状态d[i][j]表示第i行的第j个可用状态结果,所以先预处理所有可用状态,一开始直接处理了1-(1<<20)的所以一直超时 = =;然后对于每个状态把其包含的所有格子求和,如果当前状态与上一行的状态之间无冲突,则取所有上一行状态加上刚刚求得和的最大值,状态方程:d[i][j] = max(d[i][j],d[i-1][k]+t);
给你一个n*n的格子的棋盘,每个格子里面有一个非负数。
从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的和最大。
Input
包括多个测试实例,每个测试实例包括一个整数n 和n*n个非负数(n<=20)
Output
对于每个测试实例,输出可能取得的最大的和
Sample Input
3
75 15 21
75 15 28
34 70 5
Sample Output
188
Source
Happy 2007
状态d[i][j]表示第i行的第j个可用状态结果,所以先预处理所有可用状态,一开始直接处理了1-(1<<20)的所以一直超时 = =;然后对于每个状态把其包含的所有格子求和,如果当前状态与上一行的状态之间无冲突,则取所有上一行状态加上刚刚求得和的最大值,状态方程:d[i][j] = max(d[i][j],d[i-1][k]+t);
#include <cstdio> #include <cstring> #include <iostream> #include <cmath> using namespace std; const int maxn = 23; int a[maxn][maxn],n; int d[maxn][20000],tot = 0,can[20000]; bool ok(int t){ bool flag = false; while(t){ if(t&1){ if(flag) return false; flag = true; } else flag = false; t>>= 1; } return true; } int main(){ while(~scanf("%d",&n)){ tot = 0; for(int i=0;i<=(1<<n);i++) if(ok(i)) can[tot++] = i; for(int i=1;i<=n;i++) for(int j=0;j<n;j++) scanf("%d",&a[i][j]); memset(d,0,sizeof d); for(int i=1;i<=n;i++) for(int j=0;j<tot;j++){ int t = 0; for(int k=0;k<n;k++) if((1<<k)&can[j]) t += a[i][k]; for(int k=0;k<tot;k++) if(!(can[j]&can[k])) d[i][j] = max(d[i][j],d[i-1][k]+t); } int ans = 0; for(int i=0;i<tot;i++) ans = max(ans,d [i]); printf("%d\n",ans); } return 0; } /* 3 75 15 21 75 15 28 34 70 5 */
相关文章推荐
- STL容器
- 语句创建数据库表及增删改查
- Android Class加载机制(未完)
- Spark定制班第21课:Spark Streaming中动态Batch Size深入及RateController解析
- 使用Windbg解析dump文件 .
- 开一篇文章 记录我的java学习路上看过的书和资料 以及杂七杂八的面试经历
- nc元数据导出脚本
- 递归-文件结构“图”(算法基础 第3周)
- 【THUSC2016】蒟蒻的酱油记
- 最近十次打字记录
- 跟着小白学~如何使用二维数组打印杨辉三角
- canvas text
- linux下vi操作Found a swap file by the name
- Lightoj 1003 - Drunk(拓扑排序)
- 静态储存
- C++智能指针(auro_ptr...)
- 优先队列用法
- 实战 virtualenv 搭建多版本 Python 环境
- laravel随记(3)
- C++智能指针(auro_ptr...)