好久没写题了

 

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, 0sizeof(r));
    memset(v, 0sizeof(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(00);
        printf("Case %d: ", ++times);
        printf("%d\n", tot);
    }
    return 0;
}

 

posted on 2012-10-08 15:48  有间博客  阅读(146)  评论(0编辑  收藏  举报