HDU 3008 动态规划(DP) Warcraft
来源:互联网 发布:kruskal算法 详解 编辑:程序博客网 时间:2024/05/21 10:00
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3008
分析:用dp[i][j]表示攻击了i次对其造成j点伤害自身剩余魔值,则有
dp[i][j+b[k]] = max( dp[i][j+b[k]], dp[i-1][j]-a[i] );
#include<iostream>#include<string>#include<cstring>#include<algorithm>#include<cstdio>#include<cmath>#include<iomanip>using namespace std;int dp[105][105];///dp[i][j]表示攻击了i次,打了对方j点生命,自己剩下的魔值int a[105]= {0};int b[105]= {1};int main() { int n,t,k; while(cin>>n>>t>>k,n+t+k) { int m=100/k+(100%k?1:0); for(int i=1; i<=n; ++i) cin>>a[i]>>b[i]; memset(dp,-1,sizeof(dp)); dp[0][0]=100;///开始时魔法值为100 for(int i=1;i<=m;++i) for(int j=0;j<=100;++j) if(dp[i-1][j]!=-1){ dp[i-1][j] = (dp[i-1][j]+t)>100 ? 100:dp[i-1][j]+t;///魔值不超过100 for(int k=0;k<=n;++k) if(dp[i-1][j]>=a[k]&&dp[i-1][j]-a[k]>dp[i][j+b[k]]) if(j+b[k]>=100) dp[i][100]=dp[i-1][j]-a[k]; else dp[i][j+b[k]]=dp[i-1][j]-a[k]; } int p=1; for( ;p<=m;++p) if(dp[p][100]!=-1){ cout<<p<<endl; break; } if(p>m)puts("My god"); } return 0;}
- HDU 3008 动态规划(DP) Warcraft
- HDU 3008 Warcraft,动态规划,滚动数组
- HDU 3008 Warcraft (动态规划)【打怪类】
- hdu 3008 Warcraft (dp)
- HDU 3008 Warcraft (DP)
- HDU 3008 Warcraft (DP)
- hdu 3008 Warcraft(dp)
- 【DP】HDU-3008 Warcraft
- HDU 3008 Warcraft(dp)
- HDU 3008 Warcraft DP .
- hdu 3008 Warcraft(基础dp题)
- HDU 3008 Warcraft (DP 背包)
- hdu 3008 Warcraft,第一道dp题。。。
- 动态规划——Warcraft
- HDU 3008 Warcraft(DP之状态的保存)
- hdu 3008 Warcraft
- HDU 3008 Warcraft
- hdu 3008 Warcraft
- java.lang.RuntimeException: Unable to instantiate activity ComponentInfo异常解决
- C#+AE读取Shapefile,raster,gdb,mdb,CAD图,自定义格式坐标数据
- Android的Handler总结
- windows自动化
- 引用标签代码
- HDU 3008 动态规划(DP) Warcraft
- Android中程序与Service交互的方式——交互方式(五种方法)
- CorePlot 点线图的时候,缩放不超过 一定范围的功能实现
- 进程
- java各种包的用途
- 优先队列(UVAL-3135)
- fedora 16 ftp ntf配置
- windows下编译配置x264
- 对话框 QDialog