在这个世界中,衡量宝物的好处有两个维度,稀有度X和实用度H,回收员在回收一个宝物A后,下一个宝物的稀有度和实用度都不低于宝物A。那么替队长如何制定售卖顺序,才能卖给回收员宝物总个数最多。
输入:
第一行一个正整数N
接下来N行。每行两个整数分别表示X和H
X1 H1
X2 H2
样例输入:
4
3 2
1 1
1 3
2 2
样例输出
3
提示:
(1,1)
(2,2)
(3,2)
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int MAX = 1e6+6;
vector<pair<int,int>> Vec;
int N;int Result = 0;
int dp[MAX];
bool Cmp(const pair<int,int>& a,const pair<int,int>& b){
return a.first <= b.first;
}
int main()
{
int X,H;
scanf("%d",&N);
for(int i = 0;i < N;i ++){
scanf("%d%d",&X,&H);
Vec.push_back(make_pair(X,H));
}
sort(Vec.begin(),Vec.end(),Cmp);
for(int i = 0;i < Vec.size();i ++){
dp[i] = 1;
for(int j = 0;j < i;j ++){
if(Vec[j].second <= Vec[i].second){
dp[i] = max(dp[i],dp[j] + 1);
}
}
Result = max(Result,dp[i]);
}
printf("%d\n",Result);
return 0;
}