• hdu 4536 dfs


    题意:XCOM-Enemy Unknown是一款很好玩很经典的策略游戏.
    在游戏中,由于未知的敌人--外星人入侵,你团结了世界各大国家进行抵抗.随着游戏进展,会有很多的外星人进攻事件.每次进攻外星人会选择3个国家攻击,作为联盟的指挥者,你要安排有限的联盟军去支援其中一个国家,抵抗进攻这个国家的外星人.战斗胜利之后这个被支援的国家恐慌值就会-2点(恐慌值最少减为1),而其他两个未被支援的国家恐慌值就会+2点,同时和这两个国家在相同大洲的其他国家恐慌值也会+1点.当一个国家的恐慌值超过5点,这个国家就会对联盟失去信心从而退出联盟.现在给你外星人将会进攻的地点,问你最多能在不失去任何一个国家信任的情况下抵挡多少次外星人的进攻.

    链接:点我

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<queue>
     7 #include<map>
     8 using namespace std;
     9 #define MOD 1000000007
    10 const int INF=0x3f3f3f3f;
    11 const double eps=1e-5;
    12 #define cl(a) memset(a,0,sizeof(a))
    13 #define ts printf("*****
    ");
    14 const int MAXN=1005;
    15 int n,m,tt,k;
    16 int max_num;
    17 int id[MAXN],a[MAXN][3],nev[MAXN];
    18 void dfs(int num)
    19 {
    20     if(max_num>=k)   return;
    21     if(num>=k)
    22     {
    23         max_num=k;
    24         return;
    25     }
    26     for(int i=0;i<3;i++)    //枚举被支援的国家
    27     {
    28         int k1=nev[a[num][i]];
    29         int k2=nev[a[num][(i+1)%3]];
    30         int k3=nev[a[num][(i+2)%3]];    //备份三个被进攻国家的恐慌值
    31         nev[a[num][i]]-=2;
    32         if(nev[a[num][i]]<=0)  nev[a[num][i]]=1;
    33         nev[a[num][(i+1)%3]]+=2;
    34         nev[a[num][(i+2)%3]]+=2;
    35         for(int j=0;j<n;j++)
    36         {
    37             if(id[j]==id[a[num][(i+1)%3]]&&j!=a[num][(i+1)%3])  nev[j]+=1;
    38             if(id[j]==id[a[num][(i+2)%3]]&&j!=a[num][(i+2)%3])  nev[j]+=1;
    39         }
    40         bool flag=1;
    41         for(int j=0;j<n;j++)
    42         {
    43             if(nev[j]>=6)
    44             {
    45                 max_num=max(max_num,num);
    46                 flag=0;
    47                 break;
    48             }
    49         }
    50         if(flag)    dfs(num+1);
    51 
    52         for(int j=0;j<n;j++)
    53         {
    54             if(id[j]==id[a[num][(i+1)%3]]&&j!=a[num][(i+1)%3])  nev[j]-=1;
    55             if(id[j]==id[a[num][(i+2)%3]]&&j!=a[num][(i+2)%3])  nev[j]-=1;
    56         }
    57         nev[a[num][i]]=k1;
    58         nev[a[num][(i+1)%3]]=k2;
    59         nev[a[num][(i+2)%3]]=k3;    //还原三个被进攻国家的恐慌值
    60     }
    61 }
    62 int main()
    63 {
    64     int i,j;
    65     #ifndef ONLINE_JUDGE
    66     freopen("1.in","r",stdin);
    67     #endif
    68     scanf("%d",&tt);
    69     int kase=0;
    70     while(tt--)
    71     {
    72         kase++;
    73         scanf("%d%d%d",&n,&m,&k);
    74         for(i=0;i<n;i++)
    75         {
    76             scanf("%d",&id[i]);
    77         }
    78         for(i=0;i<n;i++)
    79         {
    80             scanf("%d",&nev[i]);
    81         }
    82         for(i=0;i<k;i++)
    83             scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]);
    84         max_num=0;
    85         printf("Case #%d: ",kase);
    86         dfs(0);
    87         printf("%d
    ", max_num);
    88     }
    89 }
  • 相关阅读:
    【more effective c++读书笔记】【第2章】操作符(1)
    【more effective c++读书笔记】【第1章】基础议题(2)
    【more effective c++读书笔记】【第1章】基础议题(1)
    【effective c++读书笔记】【第9章】杂项讨论
    Spring(十二)Spring整合Mybatis
    Spring(十一)Spring事物
    Spring(九)AspectJ
    Spring(八)两种自动代理
    Spring 考试错题分析
    Sping(七)Sping四种增强和顾问
  • 原文地址:https://www.cnblogs.com/cnblogs321114287/p/4472189.html
Copyright © 2020-2023  润新知