uva 10118 - Free Candies-动态规划
2015-10-07 23:22
483 查看
// // main.cpp // uva 10118 - Free Candies-动态规划 /* 这一题是多阶段决策问题.另外注意的就是状态压缩。即使用二进制表示当前的pocket具有的糖果的颜色。 在每一步选择哪一个管道决定了下一步。 我们设d[i][j][k][l] 表示依次从第一,第二个管道,第三个管道,第四个管道,当前已经到达的位置,剩下可以获得的candies对数。 这里ans 表示d[i][j][k][l]. 则若选择从第一个管道取一个 ans = max(ans ,d[i+1][j][k][l] +add ) .add表示从第一个管道选择一个candy的话,是否使得pocket具有相同的颜色的candy. */ #include <iostream> #include <queue> #include <stack> #include <stdio.h> #include <stdlib.h> #include <math.h> #include <cstdio> #define ll long long using namespace std ; int pile[4][50] ; int n ; int d[45][45][45][45] ; int dp(int i , int j , int k , int l ,int poc) { int& ans =d[i][j][k][l]; if (ans>=0) { return ans ; } else{ int num = 0,t,add ; for(int i = 0 ; i < 20 ; i++) { if(poc&(1 << i )) num++ ; } if(num ==5) { ans = 0 ; return 0 ; } else{ ans = 0; } if(i <n ) { t = poc^(1<<(pile[0][i+1]-1)) ; add = poc > t ? 1:0 ; ans = max(ans ,dp(i+1, j, k, l,t) + add) ; } if(j < n ) { t = poc^(1<<(pile[1][j+1]-1)) ; add = poc > t ? 1:0 ; ans = max(ans ,dp(i, j+1, k, l,t) + add) ; }if(k <n ) { t = poc^(1<<(pile[2][k+1]-1)) ; add = poc > t ? 1:0 ; ans = max(ans ,dp(i, j, k+1, l,t) + add) ; }if(l <n ) { t = poc^(1<<(pile[3][l+1]-1)) ; add = poc > t ? 1:0 ; ans = max(ans ,dp(i, j, k, l+1,t) + add) ; } return ans; } } int main(int argc, const char * argv[]) { while (scanf("%d" ,&n) , n ) { for (int i = 1; i <= n ; i++) { scanf("%d%d%d%d" ,&pile[0][i] ,&pile[1][i] ,&pile[2][i] ,&pile[3][i]) ; } memset(d, -1, sizeof(d)) ; cout<<dp(0, 0, 0, 0, 0)<<endl ; } return 0; }
相关文章推荐
- 实用的利用 CSS + <em>标签 来完成一个三角形的制作
- JavaScript中“+”的陷阱深刻理解
- ASP + Serv-u 实现FTP的代码
- css静态滤镜 + A:Hover 效果第1/3页
- javascript中加号(+)操作符的一些神奇作用
- Python列表append和+的区别浅析
- windows+ubuntu双系统重新安装windows后的引导修复 3ff0
- XBMC on ATV2 + XBMoteC(remote app)[XBMC遠端遙控器]
- Spring + Struts2 + Hibernate整合
- postfix + amavisd-new + clamav + spamassassin
- cacti + nagios + npc 整合部署
- URL中带加号(+)的处理
- Fedora安装 win7 32b 安装fedora x64 dvd
- Snort + base ***检测配置
- 如何区别FineReader 12与 PDF Transformer+
- TYVJ1193 括号序列解题报告
- TYVJ上一些DP的解题报告
- UVALive 6625_状态压缩
- 2014辽宁省赛 Picking Cabbage 状压dp
- 状态压缩DP joboj1430 shortest path 和 codeforces Problem 21 D Traveling Graph