UVA 11218 - KTV DFS

来源:互联网 发布:matlab中保存数据 编辑:程序博客网 时间:2024/06/11 05:48

                   深搜。。。。。。。


#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;typedef struct node{    int a,b,c,s;    node(int x=0,int y=0,int z=0,int d=0)    {        a=x,b=y,c=z,s=d;    }} node;node g[81];bool vis[10];int n,maxx;bool check(){    for(int i=1; i<=9; i++)        if(!vis[i])  return false;    return true;}void dfs(int cur,int team,int p){    if(cur==n)   return ;    for(int i=cur; i<n; i++)    {        int a=g[i].a;        int b=g[i].b;        int c=g[i].c;        if(vis[a]||vis[b]||vis[c])  continue ;        vis[a]=vis[b]=vis[c]=true;        if(team==3)        {            if(check())                maxx=max(maxx,p+g[i].s);            vis[a]=vis[b]=vis[c]=false;            continue;        }        dfs(i+1,team+1,p+g[i].s);        vis[a]=vis[b]=vis[c]=false;    }}int main(){//    freopen("in.txt","r",stdin);    int cas=0;    while(scanf("%d",&n)!=EOF&&n)    {        for(int i=0; i<n; i++)        {            int a,b,c,d;            scanf("%d%d%d%d",&a,&b,&c,&d);            node t(a,b,c,d);            g[i]=t;        }        memset(vis,false,sizeof(vis));        maxx=0;        dfs(0,1,0);        if(maxx)            printf("Case %d: %d\n",++cas,maxx);        else            printf("Case %d: -1\n",++cas);    }    return 0;}


原创粉丝点击