1 条题解
-
0
C :
#include "stdio.h" #include "stdlib.h" int n,max; int a[5000],b[5000],c[5000]; int main() { int i,j,k; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d%d",&a[i],&b[i]); c[i]=1; } for(i=0;i<n;i++) { for(j=0;j<i;j++) if(a[i]<a[j]) { k=a[i],a[i]=a[j],a[j]=k; k=b[i],b[i]=b[j],b[j]=k; } if(a[i]==a[j]&&b[i]<b[j]) { k=a[i],a[i]=a[j],a[j]=k; k=b[i],b[i]=b[j],b[j]=k; } } for(i=1;i<n;i++) { for(j=0;j<i;j++) { if(b[i]>b[j]&&c[i]==c[j]) c[i]++; } } max=0; for(i=0;i<n;i++) { if(max<c[i]) max=c[i]; } printf("%d\n",max); return 0; }
C++ :
#include<cstdio> #include<algorithm> using namespace std; struct p{int x;int y;};p a[5001]; int n,f[5001]={0},mmax=0; int cmp(const p & a,const p & b) { return a.y<b.y; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y); sort(a+1,a+n+1,cmp); for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) { if(a[j].x<a[i].x&&f[j]>=f[i]) f[i]=f[j]+1; if(mmax<f[i]) mmax=f[i]; } printf("%d",mmax+1); }
Pascal :
type node=record father:longint; fm:longint; end; type s=record x,y:longint; end; var a:array[1..10050]of s; b:array[1..10050]of node; c:array[1..50000]of longint; i,j,k,n,max,t:longint; begin readln(n); for i:=1 to n do begin read(a[i].x,a[i].y); b[i].fm:=1; b[i].father:=0; end; for i:=1 to n-1 do begin for j:=i+1 to n do if a[i].x>a[j].x then begin t:=a[i].x; a[i].x:=a[j].x; a[j].x:=t; t:=a[i].y; a[i].y:=a[j].y; a[j].y:=t; end; end; for i:=n-1 downto 1 do for j:=i+1 to n do begin if (a[i].y<a[j].y)and (b[i].fm<b[j].fm+1) then begin b[i].fm:=b[j].fm+1; b[i].father:=j; continue; end; end; max:=0; for i:=1 to n do if b[i].fm>max then begin max:=b[i].fm; k:=i; end; writeln(max); {repeat if b[k].father=0 then writeln(a[k].y) else write(a[k].y,' '); k:=b[k].father; until k=0;} end.
- 1
信息
- ID
- 804
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者