zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    在Vue脚手架里面使用font-awsome
    在webstorm上使用git
    smartGit继续使用的方法
    工作笔记
    “老司机”传授给“小白”的职业经验
    兼容性问题(目前遇到的)
    web前端页面项目经验总结
    jquery中隐藏div的几种方法
    懒加载和预加载
    JS 中的事件绑定、事件监听、事件委托
  • 原文地址:https://www.cnblogs.com/cnblogs321114287/p/4472189.html
Copyright © 2011-2022 走看看