【DP 训练】Free Candies, UVa 10118

来源:互联网 发布:商品降价提醒软件 编辑:程序博客网 时间:2024/06/01 10:41
#include<bits/stdc++.h>using namespace std;int n,dp[50][50][50][50],pile[5][50],top[5];int dfs(int cur,int status){if(cur==5)return 0;int& ans = dp[top[1]][top[2]][top[3]][top[4]];if(ans!=-1)return ans;ans = 0;for(int i=1;i<=4;i++){if(top[i]==n)continue;++top[i];if(status&1<<pile[i][top[i]])ans = max(ans,dfs(cur-1,status^1<<pile[i][top[i]])+1);else ans = max(ans,dfs(cur+1,status^1<<pile[i][top[i]]));--top[i];}return ans;}int main(void){while(scanf("%d",&n)&&n){for(int i=1;i<=n;i++){for(int j=1;j<=4;j++){cin>>pile[j][i];}}memset(top,0,sizeof(top));memset(dp,-1,sizeof(dp));cout<<dfs(0,0)<<endl;}return 0;}

1 0