提交时间:2022-07-19 12:04:23

运行 ID: 52380

#include<bits/stdc++.h> #define upf(i,n,k) for(int i=k;i<=n;i++) #define lowf(i,n,k) for(int i=n;i>=k;i--) #define Max(a,b,c) max(a,max(b,c)) #define Min(a,b,c) min(a,min(b,c)) #define ofile(N) freopen(N".in","r",stdin),freopen(N".out","w",stdout) #define ri register int #define ie inline #define ll long long using namespace std; struct wood { int l,r,siz; } a[2005]; int n,dp[2004]; ie bool cmp(wood a,wood b) { return a.siz==b.siz?a.l<b.l:a.siz>b.siz; } int ans=1,maxn; ie int read() { int s=0,w=1; char ch=getchar(); while(ch<'0'||ch>'9') { if(ch=='-')w=-1; ch=getchar(); } while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar(); return s*w; } //int ans; ie void out(int a) { if(a>=10)out(a/10); putchar(a%10+'0'); } int main() { //ofile(""); n=read(); upf(i,n,1)dp[i]=1; upf(i,n,1) a[i].l=read(),a[i].r=read(),a[i].siz=a[i].r-a[i].l; sort(a+1,a+n+1,cmp); for(int i=n;i>=1;i--) for(int j=i-1;j>=1;j--) if(a[i].l>=a[j].l&&a[i].r<=a[j].r) dp[j]=max(dp[i]+1,dp[j]); upf(i,n,1)ans=max(dp[i],ans); out(ans); return 0; }