首页 > 代码库 > 【HDOJ】2809 God of War
【HDOJ】2809 God of War
状态DP。
1 /* 2809 */ 2 #include <iostream> 3 #include <queue> 4 #include <cstdio> 5 #include <cstring> 6 #include <cstdlib> 7 #include <algorithm> 8 using namespace std; 9 10 #define MAXN 2011 12 typedef struct {13 int a, d, h, e;14 } hero_t;15 16 hero_t hero[MAXN];17 int dp[1<<MAXN];18 int exp[1<<MAXN];19 int mask[MAXN];20 bool visit[1<<MAXN];21 char name[25];22 queue<int> Q;23 24 int main() {25 int n, m, size;26 int la, ld, lh;27 int ia, id, ih;28 int ra, rb, ha, hb;29 int i, j, k, tmp;30 int s, ss;31 int slev, alev, dlev, hlev, sslev;32 33 #ifndef ONLINE_JUDGE34 freopen("data.in", "r", stdin);35 #endif36 37 mask[0] = 1;38 for (i=1; i<MAXN; ++i)39 mask[i] = (mask[i-1]<<1);40 41 while (scanf("%d%d%d%d%d%d", &la,&ld,&lh, &ia,&id,&ih) != EOF) {42 scanf("%d", &n);43 for (i=0; i<n; ++i)44 scanf("%s %d %d %d %d", name, &hero[i].a,&hero[i].d,&hero[i].h,&hero[i].e);45 m = 1<<n;46 memset(dp, 0, sizeof(int)*m);47 memset(visit, false, sizeof(bool)*m);48 dp[0] = lh;49 exp[0] = 0;50 Q.push(0);51 visit[0] = true;52 while (!Q.empty()) {53 s = Q.front();54 Q.pop();55 visit[s] = false;56 for (i=0; i<n; ++i) {57 if (s & mask[i])58 continue;59 ss = s | mask[i];60 // calculate s-state level61 slev = exp[s]/100;62 alev = la+slev*ia;63 dlev = ld+slev*id;64 // calculate hurt and round65 ha = max(1, alev-hero[i].d);66 hb = max(1, hero[i].a-dlev);67 ra = (hero[i].h+ha-1)/ha;68 rb = (dp[s]+hb-1)/hb;69 if (ra > rb)70 continue; // LvBu Lose71 exp[ss] = exp[s] + hero[i].e;72 sslev = exp[ss]/100;73 // calculate new hp74 tmp = dp[s] - (ra-1)*hb + (sslev-slev)*ih;75 dp[ss] = max(dp[ss], tmp);76 if (visit[ss] == false) {77 visit[ss] = true;78 Q.push(ss);79 }80 }81 }82 if (dp[m-1])83 printf("%d\n", dp[m-1]);84 else85 printf("Poor LvBu,his period was gone.\n");86 }87 88 return 0;89 }
【HDOJ】2809 God of War
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。