好久没写题了
CODE:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; const int M = 82; int r[M][ 4]; int v[M]; int n, tot; int flag; void dfs( int cur, int ans) { if(cur == 3) { tot = max(ans, tot); } for( int i = 0; i < n; i++) { if(!v[r[i][ 0]] && !v[r[i][ 1]] && !v[r[i][ 2]]) { ans += r[i][ 3]; v[r[i][ 0]] = v[r[i][ 1]] = v[r[i][ 2]] = 1; dfs(cur+ 1, ans); ans -= r[i][ 3]; v[r[i][ 0]] = v[r[i][ 1]] = v[r[i][ 2]] = 0; } } } void init() { flag = 0; memset(r, 0, sizeof(r)); memset(v, 0, sizeof(v)); } int main() { int times = 0; while(~scanf( " %d ", &n) && n) { init(); tot = - 1; for( int i = 0; i < n; i++) scanf( " %d%d%d%d ", &r[i][ 0], &r[i][ 1], &r[i][ 2], &r[i][ 3]); dfs( 0, 0); printf( " Case %d: ", ++times); printf( " %d\n ", tot); } return 0; }