hdu 2809(状压dp)
2013-09-10 15:29
363 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2809
思路:简单的状压dp,看代码会更明白。
View Code
思路:简单的状压dp,看代码会更明白。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct State{ int ati,def,hp,lev,exp; }dp[1<<20+2]; struct Node{ int ati,def,hp,exp; }node[21]; int n; int In_ati,In_def,In_hp; char str[22]; int main() { while(~scanf("%d%d%d%d%d%d",&dp[0].ati,&dp[0].def,&dp[0].hp,&In_ati,&In_def,&In_hp)){ scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%s%d%d%d%d",str,&node[i].ati,&node[i].def,&node[i].hp,&node[i].exp); } for(int i=1;i<(1<<20)+2;i++){ dp[i].hp=0; } dp[0].lev=1; dp[0].exp=0; for(int state=0;state<(1<<n);state++){ if(dp[state].hp<=0)continue; for(int i=0;i<n;i++){ if(state&(1<<i))continue; State S=dp[state]; int tmp1=max(1,S.ati-node[i].def); int tmp2=max(1,node[i].ati-S.def); int t=(node[i].hp/tmp1)+((node[i].hp%tmp1==0)?-1:0); S.hp-=t*tmp2; if(S.hp<=0)continue; S.exp+=node[i].exp; if(S.exp>=S.lev*100){ S.lev++; S.ati+=In_ati; S.def+=In_def; S.hp+=In_hp; } if(S.hp>dp[state|(1<<i)].hp){ dp[state|(1<<i)]=S; } } } if(dp[(1<<n)-1].hp<=0){ puts("Poor LvBu,his period was gone."); }else printf("%d\n",dp[(1<<n)-1].hp); } return 0; }
View Code
相关文章推荐
- hdu 2809(状压dp)
- hdu_4529_郑厂长系列故事——N骑士问题(状压DP)
- hdu 5691 Sitting in Line 状压dp
- hdu 4049 2011北京赛区网络赛J 状压dp ***
- hdu--4856--状压dp
- HDU-1074 Doing Homework( 状压DP )
- HDU 5418 Victor and World (状压DP入门)
- hdu 4114(状压dp)
- Hdu 4568 Hunter(状压dp)
- HDU 4529:郑厂长系列故事——N骑士问题(状压DP)
- hdu 1565 状压dp
- hdu 1074 Doing Homework(状压DP)
- Hdu 4114 Disney's FastPass(状压dp)
- hdu 4906 Our happy ending(状压dp)
- hdu 检测赛 Problem C(状压dp)
- HDU 3920 Clear All of Them I 状压DP
- HDU 4026 Unlock the Cell Phone 状压dp(类似TSP)
- HDU 1565 方格取数(1)(状压dp)
- HDU 1074 Doing Homework(状压DP)
- (状压dp)HDU 4778 Gems Fight!