2204 母艦[經典貪心]

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章