uva 10118 免费糖果 深搜+记忆化搜索
2013-04-24 09:55
232 查看
uva 10118
http://www.cnblogs.com/kedebug/archive/2013/04/07/3006493.html
http://www.cnblogs.com/kedebug/archive/2013/04/07/3006493.html
#include<stdio.h> #include<string.h> #define N 45 #define C 22 int max(int a,int b) { return a>b?a:b; } int pile[4] ,f ,n,top[4]; int dfs(int s,int hash[C]) { int i,j,ans=0; if(f[top[0]][top[1]][top[2]][top[3]]!=-1) { return f[top[0]][top[1]][top[2]][top[3]]; } if(s==5)//篮子满了,末状态 return f[top[0]][top[1]][top[2]][top[3]]=0; int h[C],t[4]; for(i=0;i<4;i++) { memcpy(h,hash,sizeof(h)); if(top[i]!=n)//到n是拿空了 { if(h[pile[i][top[i]]])//拿i堆顶,可以凑对 { h[pile[i][top[i]]]=0; top[i]++; ans=max(ans,dfs(s-1,h)+1); } else { h[pile[i][top[i]]]=1; top[i]++; ans=max(ans,dfs(s+1,h)); } top[i]--; } } return f[top[0]][top[1]][top[2]][top[3]]=ans; } int main() { int i,j,k,l,m; while(scanf("%d",&n)&&n) { memset(pile,0,sizeof(pile)); for(i=0;i<n;i++) { for(j=0;j<4;j++) scanf("%d",&pile[j][i]); } memset(f,-1,sizeof(f)); memset(top,0,sizeof(top)); int hash[C]={0}; printf("%d\n",dfs(0,hash)); } return 0; }
相关文章推荐
- UVa 10118 免费糖果(记忆化搜索+哈希)
- Uva 10118 免费糖果
- UVa 免费糖果(记忆化搜索)
- 习题9-2 免费糖果 UVa10118
- 算法竞赛入门经典 第二版 习题9-2 免费糖果 Free Candies uva10118
- UVA - 10118 Free Candies 记忆化搜索
- UVa 10118 Free Candies (记忆化搜索+状态压缩)
- 100道动态规划——5 UVA 10118 Free Candies 记忆化搜索 以及 证明状态
- UVA 10118 - Free Candies(记忆化搜索)
- UVa 10118 Free Candies(记忆化搜索经典)
- UVA 10118 Free Candies 记忆化搜索 dp紫书9-2
- UVa 10118 记忆化搜索 Free Candies
- UVA 10118 Free Candies(记忆化搜索)
- 习题9-2(免费糖果)【深搜dfs】+【记忆化搜索】
- uva 10118 - Free Candies(记忆化搜索)
- UVA10118(记忆化搜索 + 好题)
- UVA-10118 Free Candies (DP、记忆化搜索)
- UVa 10118 Free Candies(记忆化搜索经典)
- 记忆化搜索 逆向dp uva10118
- uva 10118 记忆化搜索