UVA_11218

    这个题目可以直接用回溯解决。

#include<stdio.h>
#include
<string.h>
int n,A[10],ans;
int a[100],b[100],c[100],s[100];
void dfs(int cur,int complete,int score)
{
int i;
if(complete==3)
{
if(score>ans)
ans
=score;
return;
}
for(i=cur;i<n;i++)
if(!A[a[i]]&&!A[b[i]]&&!A[c[i]])
{
A[a[i]]
=A[b[i]]=A[c[i]]=1;
dfs(i
+1,complete+1,score+s[i]);
A[a[i]]
=A[b[i]]=A[c[i]]=0;
}
}
int main()
{
int i,j,k,t;
t
=0;
while(1)
{
scanf(
"%d",&n);
if(n==0)
break;
for(i=0;i<n;i++)
scanf(
"%d%d%d%d",&a[i],&b[i],&c[i],&s[i]);
ans
=0;
memset(A,
0,sizeof(A));
dfs(
0,0,0);
printf(
"Case %d: ",++t);
if(ans>0)
printf(
"%d\n",ans);
else
printf(
"-1\n");
}
return 0;
}

  

posted on 2011-09-18 19:30  Staginner  阅读(259)  评论(0编辑  收藏  举报