1 条题解
-
0
C :
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #define N 1010 struct Node { double l; double w; }node[N]; int cmp(const void *a,const void *b) { if((*(struct Node *)a).l!=(*(struct Node *)b).l) return (*(struct Node *)a).l > (*(struct Node *)b).l ?1:-1; else return (*(struct Node *)a).w > (*(struct Node *)b).w ?1:-1; } int main() { int ncase; scanf("%d",&ncase); while(ncase--) { int n,i,j; double t; int count=1; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%lf%lf",&node[i].w,&node[i].l); if(node[i].w>node[i].l) { t=node[i].w; node[i].w=node[i].l; node[i].l=t; } } qsort(node,n,sizeof(node[0]),cmp); for(i=0;i<n-1;) { for(j=i+1;j<n;) { if(node[i].l<node[j].l && node[i].w<node[j].w) { count++; i=j; break; } else j++; } if(j==n) break; } printf("%d\n",count); } return 0; }
C++ :
#include<cstdio> #include<algorithm> #include<cstring> #define M 1024 using namespace std; struct rect{ int len,width; }d[M],p[M]; bool cmp(rect a,rect b)//按长排降序,后再按宽排 { if(a.len==b.len) return a.width<b.width; return a.len>b.len; } int main(){ int m; scanf("%d",&m); while(m--) { int n,i,j,t; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d %d",&d[i].len,&d[i].width); if(d[i].width>d[i].len) { t=d[i].width; d[i].width=d[i].len; d[i].len=t; } } sort(d,d+n,cmp); int length=1; p[0].len=900,p[0].width=900; for(i=0;i<n;i++)//终止位置 { for(j=length-1;j>=0;j--)//length 长度 { if(d[i].width<p[j].width&&d[i].len<p[j].len) { p[j+1]=d[i]; if(j+1==length) length++; break;} } } printf("%d\n",length-1); } }
Java :
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int t = in.nextInt(); while (t-- > 0) { int n = in.nextInt(); Graph[] map = new Graph[100]; int[] f = new int[n + 1]; boolean[][] g = new boolean[100][100]; for (int i = 1; i <= n; i++) { map[i] = new Graph(); map[i].x = in.nextInt(); map[i].y = in.nextInt(); } for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (map[i].x < map[j].x && map[i].y < map[j].y || map[i].x < map[j].y && map[i].y < map[j].x) g[i][j] = true; } } for (int i = 1; i <= n; i++) { f[i] = dp(f, i, n, g); } int max = 0; for (int i = 1; i <= n; i++) { if (max < f[i]) { max = f[i]; } } System.out.println(max); } } public static int dp(int[] f, int i, int n, boolean[][] g) { if (f[i] > 0) return f[i]; f[i] = 1; for (int j = 1; j <= n; j++) { if (g[i][j]) f[i] = Math.max(f[i], dp(f,j,n,g) + 1); } return f[i]; } } class Graph{ int x,y; }
- 1
信息
- ID
- 1196
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者