你的王國(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;
}