2204 母艦
時間限制: 1 s 空間限制: 32000 KB 題目等級 : 黃金 Gold
題目描述 Description
在小A的星際大戰遊戲中,一艘強力的母艦往往決定了一場戰爭的勝負。一艘母艦的攻擊力是普通的MA(Mobile Armor)無法比較的。
對於一艘母艦而言,它是由若干個攻擊系統和若干個防禦系統組成的。兩艘母艦對決時,一艘母艦會選擇用不同的攻擊系統去攻擊對面母艦的防禦系統。當這個攻擊系統的攻擊力大於防禦系統的防禦力時,那個防禦系統會被破壞掉。當一艘母艦的防禦系統全部被破壞掉之後,所有的攻擊都會攻擊到敵方母艦本身上去造成傷害。
這樣說,一艘母艦對對面的傷害在一定程度上是取決於選擇的攻擊對象的。
在瞬息萬變的戰場中,選擇一個最優的攻擊對象是非常重要的。所以需要寫出一個戰鬥系統出來,判斷出你的母艦最多能對對手造成多少傷害並加以實現。
輸入描述 Input Description
輸入第一行兩個整數M和N,表示對方母艦的防禦系統數量和你的母艦的攻擊系統數量。
接着M行每行一個整數每一個表示對方防禦系統的防禦力是多少。
接着N行每行一個整數每一個表示己方攻擊系統的攻擊力是多少。
輸出描述 Output Description
輸出僅有一行,表示可以造成的最大傷害。
樣例輸入 Sample Input
3 5
1000
2000
1200
2100
2000
1200
1000
1000
樣例輸出 Sample Output
2000
數據範圍及提示 Data Size & Hint
對於80%的數據有 1 <= N , M <= 1000
對於100%的數據有 1 <= N , M <= 100000
對樣例的解釋:
對方防禦系統有3個,防禦值爲1000(a),2000(b),1200(c),己方攻擊系統有5個,攻擊值爲2100(d),2000(e),1200(f),1000(g),1000(h)。第1輪攻擊的最優方案是d攻擊b,e攻擊c,f攻擊a,g和h攻擊對方母艦本身,造成2000點傷害。
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int a[100001],b[100001];
int ans=0,m,n;
int main()
{
cin>>m>>n;
for(int i=0;i!=m;++i){
cin>>a[i];
}
for(int i=0;i!=n;++i){
cin>>b[i];
}
sort(a,a+m);
sort(b,b+n);
int j=0;
//經典貪心
for(int i=0;i!=m;++i){//循環變量起止
while(a[i]>=b[j]){
ans+=b[j];
++j;
if(j>n-1){
cout<<0;
return 0;
}
}
++j;
}
for(int i=j;i!=n;i++){
ans+=b[i];
}
cout<<ans;
return 0;
}