uva 10118 - Free Candies-动态规划
来源:互联网 发布:海岛奇兵火炮能量数据 编辑:程序博客网 时间:2024/05/14 22:52
//// 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 longusing 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;}
0 0
- uva 10118 - Free Candies-动态规划
- uva 10118 Free Candies
- uva 10118 - Free Candies
- UVA - 10118 Free Candies
- uva 10118 - Free Candies
- UVA 10118 - Free Candies
- UVA - 10118 Free Candies
- UVA - 10118 Free Candies
- UVa 10118 Free Candies
- uva 10118 free candies
- UVA 10118 Free Candies
- UVA 10118 Free Candies
- uva 10118 Free Candies
- UVA 10118 Free Candies
- uva 10118Free Candies
- uva 10118 Free Candies
- uva 10118 Free Candies
- 100道动态规划——5 UVA 10118 Free Candies 记忆化搜索 以及 证明状态
- JQuery获取$(this)子节点对象的方法
- SPOJ 375. Query on a tree (基于边的树链剖分)
- pfn_to_page 函数
- 【POJ1543】:Perfect Cubes
- ZooKeeper集群搭建
- uva 10118 - Free Candies-动态规划
- [HDU 5437]Alisha’s Party[模拟]
- testlink安装
- c++ primer第五版(中文)习题答案 第十章第三节第二小节-lambda表达式
- Median of Two Sorted Arrays
- 软件测试专用语
- Ubuntu之系统交换分区Swap增加与优化
- 数据与算法——哥德巴赫数
- Sort Colors