HDU 1565 方格取数(1) (状态dp)
来源:互联网 发布:关于java的书 编辑:程序博客网 时间:2024/05/08 14:12
OJ题目:click here ~~
数不相邻,使得总和最大。
AC_CODE
int grid[20][20] , dp[21][17800];int n;vector<int> states;inline int MAX(int x , int y){ return x > y ? x : y;}int sum(int row , int x){ int ret = 0; for(int i = 0;i < n;i++) { if(x&(1<<i)) ret += grid[row][i]; } return ret;}int main(){ states.clear(); for(int i = 1;i < (1<<20);i++)//枚举第0行的状态 { if(i&(i<<1)) continue; states.push_back(i); } while(scanf("%d",&n) != EOF) { if(n == 0) { printf("0\n"); continue; } int i , j , k , row; for(i = 0;i < n;i++) for(j = 0;j < n;j++) scanf("%d" , &grid[i][j]); memset(dp , 0 , sizeof(dp)); for(i = 0;states[i] < (1<<n);i++)//枚举第0行的状态 { dp[0][i] = sum(0 , states[i]); } for(row = 1;row < n;row++)//从第1行开始 { for(i = 0;states[i] < (1<<n);i++)//枚举本行的状态 { for(j = 0;states[j] < (1<<n);j++)//枚举上一行的状态 { if(states[i]&states[j]) continue; dp[row][i] = MAX(dp[row][i] , dp[row - 1][j] + sum(row , states[i])); } } } int ans = -1; for(i = 0;states[i] < (1<<n);i++) ans = Max(ans , dp[n-1][i]); printf("%d\n",ans); } return 0;}
0 0
- hdu 1565 方格取数(1)(DP 状态压缩)
- hdu 1565 方格取数(1)(状态压缩DP)
- hdu 1565 方格取数(1)(状态压缩dp)
- HDU-1565 方格取数(1) 状态压缩DP
- HDU 1565 方格取数(1) (状态dp)
- HDU 1565 方格取数(1)(状态压缩DP)
- hdu 1565 方格取数(1) (状态压缩dp)
- hdu 1565 方格取数(1) 状态压缩+dp
- HDU 1565 方格取数(1) 状态压缩DP
- HDU 1565 方格取数(1) (状态压缩DP)
- hdu 1565 方格取数(1) (状态压缩DP)
- hdu 1565 方格取数(1)(状态压缩dp)
- HDU 1565 方格取数(1) (状态压缩 DP)
- hdu 1565 方格取数(1) dp+状态压缩
- hdu 1565 方格取数(1) 状态压缩dp
- 状态压缩 dp HDU 1565 方格取数(1)
- hdu 1565 方格取数(1) (状态压缩DP)
- HDU - 1565 方格取数(1) (DP)
- Android 在menu中同时显示Icon和Text
- Growl.framework dyld: Library not loaded 错误的解决办法
- poj 3660
- 创建Handler对象必须先初始化一个Looper
- 尽管MFC已经没落,我还是坚守,新的技术也很想接触学习
- HDU 1565 方格取数(1) (状态dp)
- usb camera kernel config
- 模拟浙江省赛题解(水题)
- java所有对象初始化的执行顺序
- 医疗微信营销:微动力新生活
- 设计模式-建造者模式
- 设计中的手写识别(输入法)思路 -- 下篇
- 【网络流/二分图匹配】飞行员配对
- hdu 4744 Starloop System(zkw费用流)