首页 > 代码库 > HDU 3008 DP
HDU 3008 DP
基础DP题
打BOSS BOSS和自己都有100点血,玩家先手
每回合可以选择施放技能攻击(耗蓝,共n种)或者普通攻击(不耗蓝,伤害为1),BOSS每回合会攻击自己q点血,每回合自己会恢复t点法力
方程: dp[i][j-a[k]+t]=Max(dp[i][j-a[k]+t],dp[i-1][j]+b[k]);
#include "stdio.h" #include "string.h" int inf=0x3f3f3f3f; int Max(int a,int b) { if (a<b) return b;else return a; } int main() { int i,n,m,t,q,j,k,ans; int dp[101][101],a[101],b[101]; while (scanf("%d%d%d",&n,&t,&q)!=EOF) { if (n+t+q==0) break; for (i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]); a[0]=0; b[0]=1; m=100/q; if (100%q!=0) m++; memset(dp,-1,sizeof(dp)); ans=-1; dp[0][100]=0; for (i=1;i<=m;i++) { for (j=0;j<=100;j++) if (dp[i-1][j]!=-1) { for (k=0;k<=n;k++) if (a[k]<=j) { dp[i][j-a[k]+t]=Max(dp[i][j-a[k]+t],dp[i-1][j]+b[k]); if (dp[i][j-a[k]+t]>=100) {ans=i; break;} } if (ans!=-1) break; } if (ans!=-1) break; } if (ans==-1) printf("My god\n"); else printf("%d\n",ans); } return 0; }
HDU 3008 DP
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。