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;
}