博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
10101 : 正面交锋
阅读量:4982 次
发布时间:2019-06-12

本文共 1015 字,大约阅读时间需要 3 分钟。

问题描述

在上次偷袭了B军大本营之后,B军非常愤怒,正式向A军宣战。
A军又获取了一些情报。
B军有n个士兵,每个士兵有a[i]的生命值,以及b[i]的防御力。
A军一共有m个士兵,第i个士兵,需要消耗k[i]的体力,造成p[i]点伤害。
当然,如果A军派出第i个士兵打在B军第j个士兵的话,会使得B军第j个士兵的生命值减少p[i]-b[j],当然如果伤害小于防御,那么攻击就不会奏效。
如果某个B军士兵的生命值降为0或以下,那么这个B军士兵就会被消灭。
假设每个A军士兵都开了挂,可以无限次上阵杀敌,而且从不会受伤。
请问A军最少消耗多少体力,就可以消灭所有的B军士兵。
输入格式
数据的第一行有两个整数n,m,表示B军有n个士兵,A军有m个士兵。
接下来n行,每行两个整数,a[i],b[i],分别表示B军每个士兵的生命值和防御力。
再接下来m行,每行两个整数k[i]和p[i],分别表示A军每个士兵的体力消耗和技能的伤害值。
数据范围:
1<=n<=100000
1<=m<=1000
1<=a[i]<=1000
0<=b[i]<=10
0<=k[i]<=100000
0<=p[i]<=1000
输出格式
对于给出的数据,输出最小的体力消耗值,如果不能消灭所有的B军士兵,输出-1。
样例输入
1 2
3 5
10 7
8 6
样例输出
18

哈哈哈,这是动态规划的经典背包题啊!!!!!!!!!!!!

谁是容量谁是价值什么的,自己想,很简单,虽然我敲了半小时。

#include 
#define INF 1e9using namespace std;int k[1005],p[1005];int a[100005], b[100005];int dp[15][1005];int main(){ int n,m; cin>>n>>m; for(int i=0;i
=t) dp[i][t]=min(dp[i][t], k[j]); else dp[i][t]=min(dp[i][t],dp[i][t - (p[j] - i)] + k[j]); } } } long long re=0; bool flag=1; for(int i=0;i

转载于:https://www.cnblogs.com/wuzetian/p/9900400.html

你可能感兴趣的文章
IOS 第三方管理库管理 CocoaPods
查看>>
背景色渐变(兼容各浏览器)
查看>>
iOS 电话在后台运行时,我的启动图片被压缩
查看>>
运用PCA进行降维的好处
查看>>
matlab
查看>>
《构建之法》阅读笔记02
查看>>
如何利用python将.doc文件转换为.docx文件
查看>>
Ubuntu 14.04 定时任务
查看>>
切片对象
查看>>
[置顶] Android入门教程------导入现有Android工程
查看>>
《Entity Framework 6 Recipes》中文翻译系列 (40) ------ 第七章 使用对象服务之从跟踪器中获取实体与从命令行生成模型(想解决EF第一次查询慢的,请阅读)...
查看>>
Intro to Filtering with Network Monitor 3.0
查看>>
问卷调查
查看>>
Contest Record
查看>>
51Nod 1066 - Bash游戏
查看>>
oracle控制何时触发审计动作
查看>>
NVelocity用法
查看>>
关于xp_cmdshall开启特定账号执行的相关设置步骤
查看>>
[USACO 6.3.2] Cryptcowgraphy
查看>>
.net 开发人员面试题 - 多线程
查看>>