[洛谷]P2813 母舰 (#贪心 -2.5)

题目描述

在小A的星际大战游戏中,一艘强力的母舰往往决定了一场战争的胜负。一艘母舰的攻击力是普通的MA(Mobile Armor)无法比较的。

对于一艘母舰而言,它是由若干个攻击系统和若干个防御系统组成的。两艘母舰对决时,一艘母舰会选择用不同的攻击系统去攻击对面母舰的防御系统。当这个攻击系统的攻击力大于防御系统的防御力时,那个防御系统会被破坏掉。当一艘母舰的防御系统全部被破坏掉之后,所有的攻击都会攻击到敌方母舰本身上去造成伤害。

这样说,一艘母舰对对面的伤害在一定程度上是取决于选择的攻击对象的。

在瞬息万变的战场中,选择一个最优的攻击对象是非常重要的。所以需要写出一个战斗系统出来,判断出你的母舰最多能对对手造成多少伤害并加以实现。

输入输出格式

输入格式:

输入第一行两个整数M和N,表示对方母舰的防御系统数量和你的母舰的攻击系统数量。

接着M行每行一个整数每一个表示对方防御系统的防御力是多少。

接着N行每行一个整数每一个表示己方攻击系统的攻击力是多少。

输出格式:

输出仅有一行,表示可以造成的最大伤害。

输入输出样例

输入样例#1

3 5 
1000 
2000 
1200 
2100 
2000 
1200 
1000 
1000

输出样例#1

2000

思路

依题意,2艘船的攻击和防御要排序才能得到最优解。因为我们要拿我方攻击尽量低的打对面防御系统,留尽量高的打对面船。

对了,如果一开始对面防御系统就比我们多的话就不用想了,肯定伤害为0。

#include 
#include 
#include 
using namespace std;
int n,m;
int a[100001],b[100001],i,j,k,s;
int main()
{
	ios::sync_with_stdio(false);
	cin>>m>>n;
	if(n<=m)//如果我们攻击系统少于对面的防御系统 
	{
		cout<<0<>a[i];
	}
	for(i=1;i<=n;i++)
	{
		cin>>b[i];
	}
	sort(a+1,a+m+1);//排一遍序,把敌方防御最小的排到最前面,方便我们打 
	sort(b+1,b+n+1);//把我们攻击最小的打对面防御最小的,攻击最高的留后面打船 
	for(i=1,k=1;i<=n;i++)
	{
		if(a[k]==0)//如果对面防御系统防御为0 
		{
			k++;//等于没有,遍历下一个 
		}
		if(a[k]

 

你可能感兴趣的:(贪心,洛谷原创,C++,STL,洛谷刷题题解)