好久没写题了
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;
}
#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;
}