简单题,不过还是wa了几次,原因是错误的用char来存储set——value可能大于128
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAX 81
using namespace std;
char vis[MAX],visit[10];
int big,n,flag,set[MAX][4];//set不能是char
void dfs(int cur,int all)
{
if(cur==3)
{
if(all>big)
{
flag=1;
big=all;
}
return ;
}
int i,j;
for(i=0;i<n;i++)
{
if(!vis[i])
{
if(!visit[set[i][0]]&&!visit[set[i][1]]&&!visit[set[i][2]])
{
vis[i]=1;
visit[set[i][0]]=visit[set[i][1]]=visit[set[i][2]]=1;
dfs(cur+1,all+set[i][3]);
vis[i]=0;
visit[set[i][0]]=visit[set[i][1]]=visit[set[i][2]]=0;
}
}
}
}
int main()
{
int i,j,count=1;
while(scanf("%d",&n)&&n)
{
big=0,flag=0;
memset(visit,0,10);
memset(vis,0,MAX);
for(i=0;i<n;i++)
scanf("%d %d %d %d",&set[i][0],&set[i][1],&set[i][2],&set[i][3]);
dfs(0,0);
printf("Case %d: ",count++);
if(flag==0)
printf("-1\n");
else
printf("%d\n",big);
}
return 0;
}