【2017“百度之星”程序设计大赛-资格赛】度度熊与邪恶大魔王
2017-08-12 17:25
225 查看
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
对于每组测试数据,输出最小的晶石消耗数量,如果不能击败所有的怪兽,输出-1Sample Input
1 23 5
7 10
6 8
1 2
3 5
10 7
8 6
Sample Output
618
详细见代码。
#include<cstdio> #include<cstring> #include<iostream> using namespace std; const int M=2001; const int N=1000001; const int INF=0x3f3f3f3f; #define LL long long LL n,m,a ,b ,k[M],p[M],dp[11][M],maxa,maxb,maxp; int main() { while(~scanf("%I64d%I64d",&n,&m)){ maxa=maxb=maxp=0; for(int i=1;i<=n;i++){ scanf("%I64d%I64d",&a[i],&b[i]); if(a[i]>maxa) maxa=a[i]; if(b[i]>maxb) maxb=b[i]; } for(int i=1;i<=m;i++){ scanf("%I64d%I64d",&k[i],&p[i]); if(p[i]>maxp) maxp=p[i]; } if(maxp<=maxb){puts("-1");continue;}//怪物无法消灭 memset(dp,0x3f,sizeof dp); //dp[i][j]表示打到防御力为i,生命值为j的怪物需要消耗最小的晶石 for(int i=0;i<=10;i++)//防御 for(int j=1;j<=maxa;j++)//怪物需要扣的血 for(int u=1;u<=m;u++){//枚举晶石 LL s=p[u]-i;//怪物扣的血 if(s<=0) continue;//不可能的情况 else if(s>=j) dp[i][j]=min(dp[i][j],k[u]); //扣的血大于生命值,需要消耗的晶石=min(原来消耗的晶石,当前消耗的晶石) else dp[i][j]=min(dp[i][j],dp[i][j-s]+k[u]); //扣的血小于生命值就需要再打, //需要消耗的晶石=min(原来消耗的晶石,当前消耗的晶石+打怪物需要额外增加的晶石) } LL ans=0; for(int i=1;i<=n;i++) ans+=dp[b[i]][a[i]]; cout<<ans<<endl; } } Close
相关文章推荐
- 【2017"百度之星"程序设计大赛 - 资格赛】 度度熊与邪恶大魔王
- 2017"百度之星"程序设计大赛 - 资格赛 1003 度度熊与邪恶大魔王
- 2017"百度之星"程序设计大赛-资格赛-1003-度度熊与邪恶大魔王
- 2017"百度之星"程序设计大赛 - 资格赛 度度熊与邪恶大魔王
- 2017"百度之星"程序设计大赛 - 资格赛 度度熊与邪恶大魔王
- 2017"百度之星"程序设计大赛 - 资格赛:1003 度度熊与邪恶大魔王
- 2017"百度之星"程序设计大赛 - 资格赛 1003 度度熊与邪恶大魔王(带题解)
- 【2017"百度之星"程序设计大赛资格赛 1003】度度熊与邪恶大魔王(DP 背包问题)
- 度度熊与邪恶大魔王(2017"百度之星"程序设计大赛 - 资格赛)
- 2017"百度之星"程序设计大赛 - 资格赛-1003-度度熊与邪恶大魔王
- 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)
- [刷题]2017百度之星资格赛 - 度度熊与邪恶大魔王
- 2017百度之星 资格赛 1003 度度熊与邪恶大魔王(dp)
- 2017百度之星资格赛—1003度度熊与邪恶大魔王
- 2017百度之星资格赛 1003 度度熊与邪恶大魔王
- 百度之星资格赛1003 度度熊与邪恶大魔王(dp)--2017
- 2017百度之星资格赛 1003 度度熊与邪恶大魔王
- 2017百度之星资格赛 1003 度度熊与邪恶大魔王(DP)
- 2017百度之星资格赛1003 度度熊与邪恶大魔王(完全背包)
- 2017百度之星资格赛 1003 度度熊与邪恶大魔王(DP 完全背包)