您的位置:首页 > 其它

uva 10118 Free Candies

2017-11-06 07:18 387 查看
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int vis[30],top[5],dp[60][60][60][60],n,d[4][60];
int dfs(int k){
int &t=dp[top[0]][top[1]][top[2]][top[3]];
if(t != -1) return t;
t=0;
if(k >= 5 || top[0]+top[1]+top[2]+top[3] == n * 4) return t;
for(int i=0;i<4;i++){
if(top[i] >= n) continue;
top[i]++;
if(vis[d[i][top[i]]]){
vis[d[i][top[i]]]=0;
t=max(dfs(k-1)+1,t);
vis[d[i][top[i]]]=1;
}
else{
vis[d[i][top[i]]]=1;
t=max(dfs(k+1),t);
vis[d[i][top[i]]]=0;
}
top[i]--;
}
return t;
}
int main(){
while(scanf("%d",&n) == 1 && n){
for(int i = 1;i <= n; i++){
for(int j = 0;j < 4; j++){
scanf("%d",&d[j][i]);
}
}
memset(vis,0,sizeof(vis));
memset(top,0,sizeof(top));
memset(dp,-1,sizeof(dp));
printf("%d\n",dfs(0));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: