这是一道动态规划的题目
题目
AC代码
#include<cstdio>
#include<iostream>
#include<algorithm>
#define N 5010
using namespace std;
//最长上升子序列
struct node{
int l,w;
}a[N];
int n;
int f[N];
bool cmp(node x,node y){
if(x.l==y.l){
return x.w>y.w;//长度相同,宽的从大到小
}
return x.l>y.l;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].l>>a[i].w;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
f[i]=1;//第一根棍子的准备时间为1分钟
for(int j=1;j<i;j++){
if(a[i].w>a[j].w){//上升
f[i]=max(f[i],f[j]+1);
}
}
}
int ans=0;
for(int i=1;i<=n;i++){
ans=max(ans,f[i]);
}
cout<<ans;
return 0;
}
谢谢大家