Vijos #1291
原题连接:https://vijos.org/p/1291
*原题:
描述
话说去年苹果们被陶陶摘下来后都很生气,于是就用最先进的克隆技术把陶陶克隆了好多份>.<然后把他们挂在树上,准备摘取。
摘取的规则是,一个苹果只能摘一个陶陶,且只能在它所能摘到的高度以下的最高的陶陶,如果摘不到的话只能灰溜溜的走开了>.<给出苹果数目及每个苹果可以够到的高度和各个陶陶的高度,求苹果们都摘完后剩下多少个陶陶……
格式
输入格式
第一行为两个数,分别为苹果的数量n和陶陶的数量m(n,m<=2000)
以下的n行,分别为各个苹果能够到的最大高度。
再接下来的m行,分别为各个陶陶的高度。
高度均不高于300。
当然了,摘取的顺序按照输入的“苹果够到的最大高度”的顺序来摘。
注意,高度为0的陶陶不能摘。
输出格式
输出仅有一个数,是剩下的陶陶的数量
样例1
样例输入1
5 5
9
10
2
3
1
6
7
8
9
10
Copy
样例输出1
3
水题,由贪心是从局部最优解出发,所以先从最大的苹果出发,寻找对应的最大值(这里就需要用到sort函数排序)
#include <iostream>
#incl*ude <algorithm>
#define maxn 2016
using namespace std;
int main()
{
int a[maxn],b[maxn],n,m;
while(cin>>n>>m){
int sum=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);
for(int i=n-1;i>=0;i--){
for(int j=m-1;j>=0;j--){
if(a[i]>b[j]&&b[j]!=0){//对应值不能为0,所以搜索完之后将值更迭为0
b[j]=0;
sum--;
j=0;//退出搜索
}
}
}
cout<<sum<<endl;
}
return 0;
}