勇者斗惡龍

你的王國(guó)里有一條n個(gè)頭的惡龍,你希望雇傭一些騎士把它殺死(也就是砍掉所有的頭)。村里有m個(gè)騎士可以雇傭,一個(gè)能力值為 x 的騎士可以砍掉惡龍一個(gè)直徑不超過(guò) x 的頭,且需要支付 x 個(gè)金幣。如何雇傭騎士才能砍掉惡龍所有的頭,并且支付最小的金幣?注意,一個(gè)騎士只能砍一個(gè)頭并且僅能被雇傭1次

【輸入格式】
第一行為正整數(shù)n和m,一下為n+m行,n行為每個(gè)頭的直徑,m行為每個(gè)騎士的能力。
【輸出格式】
若有最少花費(fèi),則輸出。若無(wú)解,則輸出“Loowater is doomed!”。

想法:因?yàn)槊總€(gè)勇士只能砍一個(gè)頭,當(dāng)然能選能力值小的就選小的,不可能買(mǎi)把砍刀來(lái)拍蒼蠅,所以先看能力值最小的勇士能不能砍掉最小的頭,可以的話就看第二小能力值的勇士能不能砍掉第二小的頭,不能的話就舍棄最小能力值的勇士,看第二小能力值的勇士能不能砍掉最小的那個(gè)頭,然后依次類(lèi)推。最后,所有頭都砍掉的話,那輸出使用了的勇士花費(fèi)總和,如果最強(qiáng)的勇士都出動(dòng)了,頭還沒(méi)砍完,那就“Loowater is doomed!”

我寫(xiě)的如下

#include <iostream>
#include <algorithm>
using namespace std;
int main(){
    int n,m;
    cin>>n>>m;
    int A[n],B[m];
    for(int i=0;i<n;i++)
    {
        cin>>A[i];
        
    }
    for(int i=0;i<m;i++)
        cin>>B[i];
    sort(A,A+n);
    sort(B,B+m);
    int q=0,p=0,count=0;
    while(q<n&&p<m)
    {
        if(A[q]<=B[p])
        {
            count+=B[p];
            q++,p++;
            
        }
        else if(A[q]>B[p])
            p++;
    }
    if(q==n)
        cout<<count;
    else 
        cout<<"Loowater is doomed!";
return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容