http://acm.hdu.edu.cn/showproblem.php?pid=3008
dp[i][j]表示第i秒 魔法值为j的时候对BOSS的伤害
这里用递推,因为你的魔法是在所有攻击完后才会增加
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <queue>
using namespace std;
int dp[105][105];
struct node
{
int mp;
int hp;
}num[105];
int main()
{
int n,t,q;
while(scanf("%d%d%d",&n,&t,&q),n|t|q)
{
for(int i=1;i<=n;i++)
scanf("%d%d",&num[i].mp,&num[i].hp);
num[n+1].mp=0,num[n+1].hp=1;
memset(dp,0,sizeof(dp));
int flag=0;
int ok=0;
int seconds=ceil((double)100/(double)q);
for(int i=0;i<seconds;i++)
{
for(int j=1;j<=n+1;j++)
{
for(int k=100;k>=num[j].mp;k--)
{
int mana=k-num[j].mp;
mana+=t;
if(mana>100)
mana=100;
dp[i+1][mana]=max(dp[i][k]+num[j].hp,dp[i+1][mana]);
if(dp[i+1][mana]>=100)
{
flag=i+1;
ok=1;
break;
}
}
if(ok)
break;
}
if(ok)
break;
}//n
if(ok)
printf("%d\n",flag);
else
printf("My god\n");
}
}
代码: