度度熊与邪恶大魔王

Time limit:1000 ms Memory limit:65536 kB


Problem Description

度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来。邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力。度度熊一共拥有m种攻击方式,第i种攻击方式,需要消耗k[i]的晶石,造成p[i]点伤害。当然,如果度度熊使用第i个技能打在第j个怪兽上面的话,会使得第j个怪兽的生命值减少p[i]-b[j],当然如果伤害小于防御,那么攻击就不会奏效。如果怪兽的生命值降为0或以下,那么怪兽就会被消灭。当然每个技能都可以使用无限次。请问度度熊最少携带多少晶石,就可以消灭所有的怪兽。

Input

本题包含若干组测试数据。第一行两个整数n,m,表示有n个怪兽,m种技能。接下来n行,每行两个整数,a[i],b[i],分别表示怪兽的生命值和防御力。再接下来m行,每行两个整数k[i]和p[i],分别表示技能的消耗晶石数目和技能的伤害值。数据范围:1<=n<=1000001<=m<=10001<=a[i]<=10000<=b[i]<=100<=k[i]<=1000000<=p[i]<=1000

Output

对于每组测试数据,输出最小的晶石消耗数量,如果不能击败所有的怪兽,输出-1

Sample Input

1 2
3 5
7 10
6 8
1 2
3 5
10 7
8 6

Sample Output

6
18

解题思路:

注意到防御值最大才为10,所以肯定是用防御力来遍历。设dp[j][i]为防御力为 i ,打出 j点伤害以上时所需的最少晶石。
对于第u个技能来说,如果p[u]<= i,说明根本打不出伤害,不用管。
反之,伤害则为 dmg=p[u]-i, 这时候 又有两种情况:
如果dmg>=j,说明靠这一个技能就够打出足够伤害了,那么肯定是用消耗晶石最少的那个技能,dp[j][i]=min{k[u]}
反之,光靠这个技能不足以打出足够的伤害,那么就需要借助前面的dp值来计算,dp[j-dmg][i]代表同在i防御力,打出j-dmg的伤害的最少晶石,因为dp[j-dmg][i]数量的晶石已经可以打出 j-dmg 的伤害了,此时再加上这第u个技能的伤害,就可以打到 j 以上,晶石数则为dp[j-dmg][i]+k[u],与上面一样,因为不知道哪个技能消耗的晶石最少,所以这里也取一个最小值。


Code:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long LL;
const int maxn=100000+5;
const int maxm=1000+5;LL a[maxn],b[maxn];
LL k[maxm],p[maxm];
LL dp[maxm][15];//防御力为j,打出i点伤害以上时所需的最少晶石LL max(LL a,LL b)
{return a>b?a:b;
}
LL min(LL a,LL b)
{return a<b?a:b;
}int main()
{int n,m;while(scanf("%d%d",&n,&m)!=EOF){LL up1=0,up2=0,hp=0;for(int i=0; i<n; i++){scanf("%I64d%I64d",&a[i],&b[i]);up1=max(up1,b[i]);hp=max(hp,a[i]);}for(int i=0; i<m; i++){scanf("%I64d%I64d",&k[i],&p[i]);up2=max(up2,p[i]);}if(up1>=up2){printf("-1\n");continue;}mem(dp,0);for(int i=0; i<=10; i++)//防御{for(int j=1;j<=hp;j++)//造成伤害值{dp[j][i]=1e18;for(int u=0;u<m;u++)//第u个技能{LL dmg=p[u]-i;//第u个技能能造成的伤害if(dmg<=0)continue;if(dmg>=j){dp[j][i]=min(dp[j][i],k[u]);}else{dp[j][i]=min(dp[j][i],dp[j-dmg][i]+k[u]);}}}}LL ans=0;for(int i=0;i<n;i++){ans+=dp[a[i]][b[i]];}printf("%I64d\n",ans);}return 0;
}

2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)相关推荐

  1. 2017百度之星 资格赛1003度度熊与邪恶大魔王

    1003度度熊与邪恶大魔王 Accepts: 1503 Submissions: 9026 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 3 ...

  2. 2017百度之星资格赛—1003度度熊与邪恶大魔王

    其他题目就不发博客了(有些也没做出来!!),感觉这次百度之星资格赛题目数据有毒,吐槽,其他题目也不好说,感觉这个题目正常点. 这个题目我当时想到的就是动态规划,但是评论中很多人说是贪心,我一直不理解, ...

  3. 2017百度之星资格赛1003 度度熊与邪恶大魔王(完全背包)

    题意: 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来.邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力.度度熊一共拥有m种攻击方式,第i种攻击方式,需要消耗k[i]的 ...

  4. 2017百度之星资格赛 1003 度度熊与邪恶大魔王

    本题我们可以类比背包 背包dp[i][j] 表示再有i个物品下j个空间所获得的最大价值 本题dp[i][j] 可以表示干掉i个血量j个防御力下的最小花费 我们看其实我们就是在不同血量之间转移 如果当前 ...

  5. 2017百度之星 资格赛 1003 度度熊与邪恶大魔王(dp)

    #代码: #include<bits/stdc++.h> #define MAXN 1050using namespace std; int n,m; long long int dp[M ...

  6. 百度之星资格赛 1003 度度熊与邪恶大魔王 DP 完全背包

    题目链接: http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=774&pid=1003 题目大意: a[i], ...

  7. 百度之星资格赛1003 度度熊与邪恶大魔王(dp)--2017

    度度熊与邪恶大魔王 Problem Description 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来. 邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力. 度度熊 ...

  8. 百度之星资格赛1003 度度熊与邪恶大魔王

    Problem Description 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来. 邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力. 度度熊一共拥有m种攻击方式 ...

  9. 百度之星资格赛 1003 度度熊与邪恶大魔王(二维dp)

    分析 挺好的一道题 dp[i][j]表示打败i颗血j防御力的怪兽需要的最少宝石数 然后就好了,复杂度\(O(n+m*1000*10)\) #include <bits/stdc++.h> ...

  10. (百度之星资格赛) 度度熊与邪恶大魔王 (dp)

    度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来. 邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力. 度度熊一共拥有m种攻击方式,第i种攻击方式,需要消耗k[i]的晶石 ...

最新文章

  1. python转换数据类型(int、float、str、eval、tuple、list、chr、ord、bin、oct、hex)
  2. DSP与FPGA间简单通信时序
  3. 【随感】看老科和当当的回眸相视
  4. windows 下搭建python虚拟环境
  5. 银河麒麟可执行文件双击,闪退问题
  6. Git Permission to fazhiyun86/Test.git denied to MarRoar
  7. retrofit框架学习(一)----基本用法
  8. mxnet导入图像数据
  9. Python菜鸟入门:day05列表
  10. DRDS 柔性事务漫谈
  11. servlet中通过getWriter()获取out返回给浏览器出现中文乱码问题
  12. 怎么多台计算机网络同传,使用网刻工具进行局域网内的网络同传
  13. 东风日产全新劲客首次搭载BOSE PERSONAL PLUS音响;艾比森举办秋季发布会推出多个新品 | 全球TMT...
  14. 离散数学-传递闭包的代码计算
  15. H5DS简单又强大的H5编辑器
  16. 国内TeamViewer正版授权的代理商有哪些?如何查询?
  17. 基于计算机视觉的食物新鲜度分级检测
  18. 1327集群_警用集群系统标准MPT-1327信令
  19. Windows基础命令
  20. Logback新版本报no applicable action for [Encoding]问题

热门文章

  1. 王国保卫战Kingdom Rush 单机游戏金币消耗降低
  2. 关于RPC框架封装时ThreadPool的选型和设计
  3. 开发微信小程序推荐使用phpstorm进行开发
  4. 前端ajax实现分页思路详解
  5. Intel i226芯片4端口千兆以太网卡 2.5GPoE工业相机图像采集卡介绍
  6. DM368 UBL和u-boot的裁剪 .
  7. 必过SafetyNet!以MIUI开发版系统为例详解Android设备通过SafetyNet校验方法
  8. SafetyNet Attestation API
  9. vue3中使用elementui组件
  10. 垃圾收集器回收种类 以及七种垃圾收集器