hdu3646 Fate Stay Night(dp,读题障碍)
来源:互联网 发布:淘宝购买叶罗丽娃娃 编辑:程序博客网 时间:2024/05/01 09:41
题目大意:
剑客VS狂战士。剑客的招数是依次召唤 N只火鸟攻击(为啥不叫召唤师),火鸟体力不一定相同。而狂战士有 K条命,火鸟一滴血换狂战士一滴血,直到一方体力为0。狂战士体力为0并且还有剩余生命则涅槃重生。火鸟刚招出来是YoungBrid,若杀死过狂战士,则变成OldBrid。剑客可以使用 M次咒语,每次可以使当前火鸟的体力*2。(要求最优状态,则肯定是在刚放出火鸟时施放咒语)
攻击规则: (m为鸟还剩体力,n为狂战士当前生命还剩体力)
1. m>n。则狂战士重生(如果可以的话),鸟体力变为m-n(如果是YoungBird则变为OldBrida)。
2. m=n。则狂战士重生(如果可以的话),鸟体力变为0,然后挂掉。
3. m<n。如果鸟为OldBrid,则直接挂掉,狂战士无损伤。如果为YoungBrid,则换掉狂战士m滴血,然后挂掉。
前提:只有在刚放出一只火鸟,或者狂战士重生才会触发攻击规则。(即不存在攻击中的状态)
最后,输出N只火鸟最多能和谐掉狂战士多少条命。(转自大神:http://blog.sina.com.cn/s/blog_5e8c2b4e01010fbo.html)
http://acm.hdu.edu.cn/showproblem.php?pid=3646
dp[i][j] = max(dp[i-1][j]+第i只鸟不使用double可杀死的怪兽数, dp[i-1][j-1]+第i只鸟使用double可杀死的怪兽数)
dp[i][j]指前i只鸟使用j次double可杀死的怪兽数
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int dp[10010][110],rest[10010][110]; int ac[10010],bc[100010],n,m,k; int cc(int acc, int &bcc, int now) { int flag = 1; while(now < k) { if(acc > bcc) //m>n { acc -= bcc; now++; bcc = bc[now+1]; flag = 0; } else if(acc == bcc) //m==n { now++; bcc = bc[now+1]; break; } else if(flag) //m<n且还是YoungBrid { bcc -= acc; break; } else //m<n且已经是OldBrid break; } return now; } int main() { while(scanf("%d%d%d",&n,&m,&k) == 3 && n+m+k) { for(int i = 1; i <= n; i++) scanf("%d",&ac[i]); for(int i = 1; i <= k; i++) scanf("%d",&bc[i]); memset(dp, 0, sizeof(dp)); m = min(m, n); rest[0][0] = rest[0][1] = bc[1]; for(int i = 1; i <= n; i++) { int res = rest[i-1][0]; dp[i][0] = cc(ac[i], res, dp[i-1][0]); rest[i][0] = res; for(int j = 1; j <= min(m, i); j++) { int res1 = rest[i-1][j], res2 = rest[i-1][j-1]; int k1 = cc(ac[i], res1, dp[i-1][j]), k2 = cc(ac[i]*2, res2, dp[i-1][j-1]); if(k1 > k2) { dp[i][j] = k1; rest[i][j] = res1; } else if(k1 < k2) { dp[i][j] = k2; rest[i][j] = res2; } else { dp[i][j] = k1; rest[i][j] = min(res1, res2); } } } printf("%d\n",dp[n][m]); } return 0; }
0 0
- hdu3646 Fate Stay Night(dp,读题障碍)
- HDOJ 3646 Fate Stay Night (DP)
- 2010杭州赛区网络预赛 1006 Fate Stay Night (DP)
- hdu 3646 Fate Stay Night
- hdu 3646 Fate Stay Night
- 重看《Fate / stay night Unlimited Blade Works》
- HDU3646Fate Stay Night动态规划DP题解
- The 35th ACM/ICPC Asia Regional Hangzhou Site —— Online Contest hdu 3646 Fate Stay Night
- hdu2159 FATE(DP)
- [040130]命运之夜Fate Stay Night【汉化硬盘版】[带全通关CG回想完美&跳过序章初始存档&中文攻略]
- HDU 2159 FATE(dp)
- hdu 2159 FATE (二维DP)
- hdu 2159 FATE (水题,dp)
- HDU 2159 FATE(二维dp背包)
- DP(01背包) HDU-2159 FATE
- [2010杭州赛区网络赛1006]Fate Stay
- HDOJ FATE 二维DP
- hdu 2159 FATE (dp)
- 简单的listview实现
- TCP之深入浅出send和recv
- PAT 1019. General Palindromic Number (20)
- python正则表达式
- python 随机产生多维高斯分布点
- hdu3646 Fate Stay Night(dp,读题障碍)
- Notification_安卓
- HDU 5533 Dancing Stars on Me(判断n个整数点是否能组成正n边形)——2015ACM/ICPC亚洲区长春站
- Longest Common Prefix
- HDOJ 1995 汉诺塔V
- 粒子群算法的matlab实现
- 【程序44】 题目:一个偶数总能表示为两个素数之和。
- 拼图小游戏“ST--拼图”开发篇之主要功能的实现(三)
- AlertDialog的初步了解