骑士的工作
题目背景
你作为一个村的村长,保卫村庄是理所当然的了。今天,村庄里来了一只恶龙,他有 n 个头,恶龙到处杀人放火。你着急了。不过天无绝人之路,现在来了一个骑士团。里面有 m 位成员(往下看)。
题目描述
每个人都可以砍掉一个大小不超过 z 的头,需要 z 个金币,求最小花费。
输入格式
第一行两个整数 n,m。
下接 n 行,一个整数表示 n 个头的大小。
下接 m 行,每个人可以砍的头大小和需要的金币数。
输出格式
一个整数,最小花费。如果无解,输出 you died!
。
样例 #1
样例输入 #1
2 3
5
4
7
8
4
样例输出 #1
11
提示
对于所有数据,1≤n,m≤2×104。
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
int x[n],y[m],sum=0,num;
bool defeat=false;
for(int i=0;i<n;i++)
{
cin>>x[i];
}
for(int i=0;i<m;i++)
{
cin>>y[i];
}
sort(x,x+n);
sort(y,y+m);
for(int j=0,num=0;j<m;j++)
{
if(y[j]>=x[num])//num用地很巧妙,这样就只要遍历y数组
{
sum+=y[j];
num++;
}
if(num==n)
{
defeat=true;
break;
}
}
if(defeat) cout<<sum<<endl;
else cout<<"you died!"<<endl;
return 0;
}