【题解】母舰
【题目描述】
在小A的星际大战游戏中,一艘强力的母舰往往决定了一场战争的胜负。一艘母舰的攻击力是普通的MA(Mobile Armor)无法比较的。 对于一艘母舰而言,它是由若干个攻击系统和若干个防御系统组成的。两艘母舰对决时,一艘母舰会选择用不同的攻击系统去攻击对面母舰的防御系统。当这个攻击系统的攻击力大于防御系统的防御力时,那个防御系统会被破坏掉。当一艘母舰的防御系统全部被破坏掉之后,所有的攻击都会攻击到敌方母舰本身上去造成伤害。 这样说,一艘母舰对对面的伤害在一定程度上是取决于选择的攻击对象的。 在瞬息万变的战场中,选择一个最优的攻击对象是非常重要的。所以需要写出一个战斗系统出来,判断出你的母舰最多能对对手造成多少伤害并加以实现。
【输入描述】
输入第一行两个整数M和N,表示对方母舰的防御系统数量和你的母舰的攻击系统数量。 接着M行每行一个整数每一个表示对方防御系统的防御力是多少。 接着N行每行一个整数每一个表示己方攻击系统的攻击力是多少。
【输出描述】
输出仅有一行,表示可以造成的最大伤害。
【样例输入】
3 5 1000 2000 1200 2100 2000 1200 1000 1000
【样例输出】
2000
【参考答案】
#include<bits/stdc++.h> using namespace std; int m,n,a[100005],b[100005],kkk; int main(){ cin>>m>>n; for(int i=1;i<=m;i++){ cin>>a[i]; } for(int i=1;i<=n;i++){ cin>>b[i]; } sort(a+1,a+m+1); sort(b+1,b+n+1); int j=1; for(int i=1;i<=n;i++){ if(a[j]==0)j++; if(a[j]<b[i]&&a[j]!=0){ b[i]=0; j++; } } if(j<=m){ cout<<0; return 0; } for(int i=1;i<=n;i++){ kkk+=b[i]; } cout<<kkk<<endl; return 0; }
贪心匹配:
如果当前防御系统
a[j]
已经被破坏(即a[j] == 0
),则移动到下一个防御系统。如果当前攻击系统
b[i]
可以破坏防御系统a[j]
(即b[i] > a[j]
),则将该攻击系统标记为已使用(b[i] = 0
),并移动到下一个防御系统。初始化指针
j
为1,表示当前需要破坏的防御系统。遍历所有攻击系统
b[i]
:检查防御系统是否全部被破坏:如果
j <= m
,说明还有防御系统未被破坏,输出0。计算剩余攻击力:将所有未被使用的攻击系统(即
b[i] != 0
)的攻击力累加,输出结果。
扫描二维码推送至手机访问。
版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。