zoukankan      html  css  js  c++  java
  • hdu 2809(状压dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2809

    思路:简单的状压dp,看代码会更明白。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 
     7 struct State{
     8     int ati,def,hp,lev,exp;
     9 }dp[1<<20+2];
    10 
    11 struct Node{
    12     int ati,def,hp,exp;
    13 }node[21];
    14 
    15 int n;
    16 int In_ati,In_def,In_hp;
    17 char str[22];
    18 
    19 int main()
    20 {
    21     while(~scanf("%d%d%d%d%d%d",&dp[0].ati,&dp[0].def,&dp[0].hp,&In_ati,&In_def,&In_hp)){
    22         scanf("%d",&n);
    23         for(int i=0;i<n;i++){
    24             scanf("%s%d%d%d%d",str,&node[i].ati,&node[i].def,&node[i].hp,&node[i].exp);
    25         }
    26         for(int i=1;i<(1<<20)+2;i++){
    27             dp[i].hp=0;
    28         }
    29         dp[0].lev=1;
    30         dp[0].exp=0;
    31         for(int state=0;state<(1<<n);state++){
    32             if(dp[state].hp<=0)continue;
    33             for(int i=0;i<n;i++){
    34                 if(state&(1<<i))continue;
    35                 State S=dp[state];
    36                 int tmp1=max(1,S.ati-node[i].def);
    37                 int tmp2=max(1,node[i].ati-S.def);
    38                 int t=(node[i].hp/tmp1)+((node[i].hp%tmp1==0)?-1:0);
    39                 S.hp-=t*tmp2;
    40                 if(S.hp<=0)continue;
    41                 S.exp+=node[i].exp;
    42                 if(S.exp>=S.lev*100){
    43                     S.lev++;
    44                     S.ati+=In_ati;
    45                     S.def+=In_def;
    46                     S.hp+=In_hp;
    47                 }
    48                 if(S.hp>dp[state|(1<<i)].hp){
    49                     dp[state|(1<<i)]=S;
    50                 }
    51             }
    52         }
    53         if(dp[(1<<n)-1].hp<=0){
    54             puts("Poor LvBu,his period was gone.");
    55         }else 
    56             printf("%d
    ",dp[(1<<n)-1].hp);
    57     }
    58     return 0;
    59 }
    60 
    61 
    62                 
    63 
    64                 
    View Code
  • 相关阅读:
    Native RabbitMQ Direct Exchange
    RabbitMQ系列文章导读
    AbstractQueuedSynchronizer
    CountDownLatch和CyclicBarrier
    显示锁Lock
    《SeleniumBasic 3.141.0.0
    《SeleniumBasic 3.141.0.0
    《SeleniumBasic 3.141.0.0
    《SeleniumBasic 3.141.0.0
    《SeleniumBasic 3.141.0.0
  • 原文地址:https://www.cnblogs.com/wally/p/3312267.html
Copyright © 2011-2022 走看看