UVa 11218 - KTV

来源:互联网 发布:佛山软件产业园招聘 编辑:程序博客网 时间:2024/04/28 11:59

题意:让你从n种搭配中,选出3个,使得选出的9个数字巧好是“1~9”不重复,在所有符合条件的情况中输出分数最高的情况。

解法:dfs回溯,即:枚举出所有符合条件的情况从中选出分数最高的那个。

代码如下:

#include <iostream>#include <algorithm>#include <cstring>#include <cstdlib>#include <cstdio>#include <cmath>using namespace std;int num, _max;bool vis[11];struct group{    int a, b, c, d;} g[85];void dfs(int cur, int score){    if(cur >= 3)    {        if(_max < score)            _max = score;        return ;    }    for(int i=0; i<num; i++)        if(vis[g[i].a] && vis[g[i].b] && vis[g[i].c])        {            vis[g[i].a] = vis[g[i].b] = vis[g[i].c] = false;            dfs(cur + 1, score + g[i].d);            vis[g[i].a] = vis[g[i].b] = vis[g[i].c] = true;        }}int main(){#ifdef test    freopen("sample.txt", "r", stdin);#endif    int cc = 1;    memset(vis, true, sizeof(vis));    while(scanf("%d", &num) && num)    {        _max = -1;        for(int i=0; i<num; i++)            scanf("%d%d%d%d", &g[i].a, &g[i].b, &g[i].c, &g[i].d);        dfs(0, 0);        printf("Case %d: %d\n", cc++, _max);    }    return 0;}


原创粉丝点击