题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3008

题目大意:人有100血和100魔法,每秒增加 t 魔法(不能超过100)。n个技能,每个技能消耗cost[i]魔法值,造成hurt[i]伤害。普通攻击不消耗魔法,每秒1伤害。

boss有100血,每秒对人造成q伤害。每秒内,人先攻击,boss后攻击。问最少多少秒杀死boss?

Sample Input

4 2 25
10 5
20 10
30 28
76 70
4 2 25
10 5
20 10 3
0 28
77 70
0 0 0

Sample Output

4

My god

分析:普通攻击可以看做是魔法消耗为0,伤害为1的魔法攻击(这一小点能够节省时间)

  dp[i][j]表示第 i 秒 有 j 的魔法值时,boss受到伤害的值。

  if(   dp[ i ][ 上次剩余魔法 + 补充魔法 - K技能消耗 ]      <    dp[ i-1 ][ 上次剩余魔法 ] +  K技能打掉血量  )

dp[ i ][ 上次剩余魔法 + 补充魔法 - K技能消耗 ]      =    dp[ i-1 ][ 上次剩余魔法 ] +  K技能打掉血量 ;

很简单的状态转移吧,只是我不明白,比如如果第一秒只用普通攻击,那即使不消耗魔法,为什么dp[1][1...99]也要计算?

代码如下:

 # include<stdio.h>
# include<string.h> int cost[],hurt[]; //魔法 和 伤害
int dp[][]; // int main(){
int n,t,q;
int i,j,k,temp,flag;
cost[] = ; hurt[] = ; //普通攻击 while(scanf("%d%d%d",&n,&t,&q) && n && t && q)
{
for(i=;i<=n;i++)
scanf("%d%d",&cost[i],&hurt[i]);
memset(dp,,sizeof(dp));
flag = ;
for(i=;(i-)*q<;i++) //不能是<=100,因为自己死了的话,算输
{
for(j=;j<=;j++)
{
for(k=;k<=n;k++)
{
if(j-cost[k] < )
continue;
temp = (j-cost[k]+t>) ? : j-cost[k]+t; //回复魔法超过100,按100计算
if(dp[i][temp] < dp[i-][j] + hurt[k])
dp[i][temp] = dp[i-][j] + hurt[k];
if(dp[i][temp] >= ) //一旦boss伤害超过100,结束
{ flag=; break; }
}
if(flag) break;
}
if(flag) break;
}
if(flag) printf("%d\n",i);
else printf("My god\n");
}
return ;
}

HDU 3008 Warcraft(DP)的更多相关文章

  1. hdu 3008:Warcraft(动态规划 背包)

    Warcraft Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  2. HDU 4433 locker(DP)(2012 Asia Tianjin Regional Contest)

    Problem Description A password locker with N digits, each digit can be rotated to 0-9 circularly.You ...

  3. hdu 2059 龟兔赛跑(dp)

    龟兔赛跑 Problem Description 据说在很久很久以前,可怜的兔子经历了人生中最大的打击——赛跑输给乌龟后,心中郁闷,发誓要报仇雪恨,于是躲进了杭州下沙某农业园卧薪尝胆潜心修炼,终于练成 ...

  4. HDU 4832 Chess (DP)

    Chess Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  5. HDU 4945 2048(dp)

    题意:给n(n<=100,000)个数,0<=a[i]<=2048 .一个好的集合要满足,集合内的数可以根据2048的合并规则合并成2048 .输出好的集合的个数%998244353 ...

  6. HDU 2340 Obfuscation(dp)

    题意:已知原串(长度为1~1000),它由多个单词组成,每个单词除了首尾字母,其余字母为乱序,且句子中无空格.给定n个互不相同的单词(1 <= n <= 10000),问是否能用这n个单词 ...

  7. hdu 2571 命运(dp)

    Problem Description 穿过幽谷意味着离大魔王lemon已经无限接近了! 可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个 ...

  8. HDU 6170----Two strings(DP)

    题目链接 Problem Description Giving two strings and you should judge if they are matched.The first strin ...

  9. HDU 2159 FATE (dp)

    FATE Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissi ...

随机推荐

  1. 【Java基础】Java类及成员和修饰符的关系

    修饰符的分类 权限修饰符:private,默认的,protected,public 状态修饰符:static,final 抽象修饰符:abstract 类的修饰符 权限修饰符:默认修饰符,public ...

  2. hdu5601-N*M bulbs(黑白棋盘染色)

    一个矩形,一个人从左上角走到右下角,每走过一个位置把0变成1,1变成0. 求有没有可能他离开之后所有的数都是0 假设这个矩形是一个棋盘,黑白相间. 这样会发现从一个颜色走到相同颜色可以对棋盘不产生任何 ...

  3. epoll原理解释(转)

    转自:http://yaocoder.blog.51cto.com/2668309/888374   首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象. ...

  4. A Tour of Go Making slices

    Slices are created with the make function. It works by allocating a zeroed array and returning a sli ...

  5. IOS学习笔记38--@class #import辨析 #include

    tyle="margin:20px 0px 0px; line-height:26px; font-family:Arial"> #include         区分 #i ...

  6. [置顶] android LBS的研究与分享(附PPT)

    早上起床后想想以前的工作有什么可以分享的... 两年前,前公司在做一个陌生人交友的社交软件(比陌陌还早),需要研究LBS的相关工作(这里面主要研究的是Google定位)... 一.简要调研结果 很多 ...

  7. [译]信仰是怎样毁掉程序猿的How religion destroys programmers

    作者原文地址 作者John Sonmez 英文水平不够高,翻译不太准确. 翻译地址:译文 尽管文章是13年的,可是这段时间恰好看到.net开源核心之后,各种java和.net掐架. 语言之争有些牵涉到 ...

  8. STM32F030 IO口外部中断应用

    //==文件exit.h============================================================ #ifndef __EXIT_H #define __ ...

  9. careercup-树与图 4.8

    4.8 你有两棵非常大的二叉树:T1,有几百万个结点:T2,有几百个结点.设计一个算法,判断T2是否为T1的子树. 如果T1有这么一个结点n,其子树与T2一模一样,则T2C++实现代码: #inclu ...

  10. mysql导出部分(指定)数据库表字段

      需要导出某个表中的部分字段信息 之前导出数据库表一直使用mysqldump命令,例如: mysqldump -hIP -uroot -P3306 -p 库 表 > 名字.sql 但是如果导出 ...