[cpp] 描述:直接暴就可以了 #include <cstdio> #include <cstdlib> #include <cstring> #define N 100003 int num[1010][4],s[11]; int n,sum,m=1; void dfs(int cur,int count) { int x=0; for(int i=1; i<=9; i++) if(!s[i]) { x=1; break; } if(cur>=n||!x) { if(!x&&count>sum) sum=count; return; } for(int i=cur; i<n; i++) { if(s[num[i][0]]+s[num[i][1]]+s[num[i][2]]==0) { s[num[i][0]]=s[num[i][1]]=s[num[i][2]]=1; dfs(cur+1,count+num[i][3]); s[num[i][0]]=s[num[i][1]]=s[num[i][2]]=0; } } } int main() { www.2cto.com // freopen("a.txt","r",stdin); while(scanf("%d",&n)!=EOF) { if(!n) break; sum=-1; memset(s,0,sizeof(s)); for(int i=0; i<n; i++) scanf("%d%d%d%d",&num[i][0],&num[i][1],&num[i][2],&num[i][3]); dfs(0,0); printf("Case %d: %d\n",m++,sum); } return 0; }