度度熊与邪恶大魔王

 Accepts: 1764
 Submissions: 10691
 Time Limit: 2000/1000 MS (Java/Others)
 Memory Limit: 32768/32768 K (Java/Others)

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<=100000

1<=m<=1000

1<=a[i]<=1000

0<=b[i]<=10

0<=k[i]<=100000

0<=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刚开始感觉BFS试试能不能过,刚开始DP没找到正解,最后爆炸,超出了限制300K的内存,改了半年还是降不下来,知道BFS行不通,后来讨论区有大神发10*1000*1000的复杂度,还是一头雾水,最后他们说DP打表,才开始慢慢懂了,还是太菜。题目大意直接明了:转载一个大神的解题思路:

解题思路:


注意到防御值最大才为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],与上面一样,因为不知道哪个技能消耗的晶石最少,所以这里也取一个最小值。 弱弱的贴上自己的代码,写的个人感觉还是蛮清楚的。最后的输出卡long long     Int是WA,╮( ̄▽ ̄")╭。
#include<stdio.h>
#include<string.h>
int a[100050][2];//怪兽的生命值和防御
int b[1010][2];//人消耗的数目和伤害值
int flag[100050][15];//记录枚举的防御力
int max(int a,int b)
{return a>b?a:b;
}
int min(int a,int b)
{return a>b?b:a;}
int main()
{int n,m;int temp,temp1,temp2,temp3;while(scanf("%d%d",&n,&m)!=EOF){temp=0; temp1=0;temp2=0;temp3=0;memset(a,0,sizeof(a));memset(b,0,sizeof(b)); memset(flag,0,sizeof(flag));//清空储存 for(int i=0;i<n;i++){scanf("%d%d",&a[i][0],&a[i][1]);//生命值 防御力 temp=max(a[i][0],temp);//求出来最大的生命值 temp1=max(a[i][1],temp1);//求出来最大的防御力 }for(int j=0;j<m;j++){scanf("%d%d",&b[j][0],&b[j][1]);temp2=max(b[j][0],temp2);//求出来最大的消耗 temp3=max(b[j][1],temp3); //求出来最大的技能伤害 } if(temp3<=temp1)printf("-1\n");else{for(int i=0;i<=temp1;i++)//枚举所有的防御力 {for(int j=1;j<=temp;j++)//枚举生命力 {flag[j][i]=0x3f3f3f3f;//生命力为j 防御力为i 的怪兽 for(int k=0;k<m;k++)//枚举技能 总共输入n个技能 {if(b[k][1]-i>=j)//直接打死怪兽 flag[j][i]=min(b[k][0],flag[j][i]);//比较当前技能杀死这个怪兽和原来杀死怪兽中的技能中 谁的消耗少一点else if(b[k][1]-i<=0)//当前技能造不成伤害 continue;      else  //伤害大于0小于J 比较当前消耗和除去此次伤害剩下的伤害最小的消耗加上此次消耗的比较 {flag[j][i]=min(flag[j][i],flag[j-(b[k][1]-i)][i]+b[k][0]); } }   }}long long  sum=0;for(int i=0;i<n;i++){sum=sum+flag[a[i][0]][a[i][1]];}printf("%I64d\n",sum);} }return 0;
} 

度度熊与邪恶大魔王(2017百度之星程序设计大赛 - 资格赛)相关推荐

  1. 2017百度之星程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】...

    度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...

  2. 2017百度之星程序设计大赛-资格赛

    ACM模版 忙里偷闲的写了几道题,这两天好忙啊--只过一道题就能通过资格赛,所以并没有什么签到题--但是的确有的题被我想难了~~~ 1002-度度熊的王国战略 >>>并查集<& ...

  3. 2017百度之星程序设计大赛 - 资格赛:1003 度度熊与邪恶大魔王

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

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

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

  5. 【2017百度之星程序设计大赛 - 资格赛】 度度熊与邪恶大魔王

    [Link]: [Description] [Solution] 因为技能的效果和花费是不会变的; 所以,考虑预处理m个技能达成一定的伤害最少需要的魔法石数量; 可以把对这m个技能做一个类似的完全背包 ...

  6. 2017百度之星程序设计大赛 - 复赛 01,03,05

    Arithmetic of Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  7. HDU 6114 Chess 【组合数】(2017百度之星程序设计大赛 - 初赛(B))

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

  8. 2018百度之星程序设计大赛 - 资格赛 hdu6345(找区间最小值)

    子串查询 Time Limit: 3500/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Sub ...

  9. [SinGuLaRiTy] 2017 百度之星程序设计大赛 初赛A

    [SinGuLaRiTy-1036] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 小C的倍数问题 Time Limit: 2000/100 ...

最新文章

  1. java代码段替换,java-片段添加或替换不起作用
  2. 数据库-笛卡尔积-内连接
  3. 曾以为只能拿8K,22届学弟字节校招心路历程
  4. SignalR在React/Go技术栈的实践
  5. R语言学习笔记(4)
  6. 【Arthas】Arthas 类查找和反编译原理
  7. 【服务器】微信小程序转qq小程序
  8. Windows平台CocosStudioV3.10安装配置(使用Cocos2d-xV3.17.2进行开发)
  9. 25. 单体内置对象
  10. centos6 revive-adserver
  11. VMware虚拟化- 虚拟化与VMware的基础介绍
  12. 单机版pc端车牌识别
  13. 那年花一个钟用PS改证件照的背景色,今天用Excel我只花了60秒!
  14. XCODe运行yueyu设置
  15. 12个在线网站测速工具——web性能
  16. Acer主板装系统报reboot and select proper boot device
  17. 微信小程序请求的封装及跨域的解决。
  18. python 爬取菜鸟教程python100题,百度贴吧图片反爬虫下载,批量下载
  19. 天兔插件监控mysql
  20. makehuman问题汇总

热门文章

  1. ESP8266接入阿里云物联网平台上传DHT11检测的温湿度数据
  2. Docker的安全和日志管理
  3. Restricted Boltzmann Machine(限制玻尔兹曼机 RBM)
  4. 联想小新Pro14外接显示器无法显示
  5. ZXV10 B700V5机顶盒支持的无线网卡主芯片
  6. 家里电脑做服务器没有显示器,服务器主机怎么打开没有显示器
  7. 进来学习,这个拿墨刀产品素材设计大赛万元大奖的原型设计超强
  8. python中计算BLEU分数
  9. 嵌入式多媒体文本的html,嵌入式浏览器开发
  10. js去除字符串首尾空格