1 条题解

  • 0
    @ 2025-11-30 16:26:39

    C :

    #include <stdio.h>
    #include <stdlib.h>
    #define FOR(i,n) for(i=0;i<n;i++)
    
    struct node{
        int begin,end,pos;
    };
    
    int cmp(const void *a, const void *b){
        struct node e1 = *(struct node *)a;
        struct node e2 = *(struct node *)b;
        return e1.end - e2.end;
    }
    
    int main(){
        int n;
        int i,j,max;
        struct node f[105];
    
        while(~scanf("%d", &n), n){
            FOR(i,n){
                scanf("%d%d", &f[i].begin, &f[i].end);
            }
            qsort(f, n, sizeof(f[0]),cmp);
            FOR(i,n){
                f[i].pos = 0;
                FOR(j,i){
                    if(f[j].end<=f[i].begin&&f[j].pos>f[i].pos)
                        f[i].pos = f[j].pos;
                }
                f[i].pos++;
            }
    
            /*
            FOR(i,n)
                printf("i=%d begin=%d end=%d pos=%d\n", i+1, f[i].begin,f[i].end,f[i].pos);
            */
            max = -1;
            FOR(i,n){
                if(max<f[i].pos)
                    max = f[i].pos;
            }
            printf("%d\n", max);
    
        }
        return 0;
    }
    
    

    C++ :

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    
    struct tv
    {
    	int s;
    	int e;
    }a[100],t;
    
    bool cmp(tv a,tv b)
    {
    	if(a.e==b.e)
    		return a.s<b.s;
    	else
    		return a.e<b.e;
    }
    
    int main()
    {
    	int n,i,k;
    	while(scanf("%d",&n)!=EOF,n)
    	{
    		k=1;
    		for(i=0;i<n;i++)
    			scanf("%d%d",&a[i].s,&a[i].e);
    		sort(a,a+n,cmp);
    		t.s=a[0].s;
    		t.e=a[0].e;
    		for(i=1;i<n;i++)
    		{
    			if(a[i].e>t.e)
    			{
    				if(a[i].s>=t.e)
    				{
    					k++;
    					t.s=a[i].s;
    					t.e=a[i].e;
    				}
    			}
    		}
    		printf("%d\n",k);
    	}
    	return 0;
    }
    

    Java :

    import java.util.*;
    
    
    public class Main{
    	public static void main(String[] args){
    		Scanner scan = new Scanner(System.in);
    		
    		while(scan.hasNextInt()){
    			int n = scan.nextInt();
    			if(n == 0){
    				break;
    			}
    			
    			Tv[] tvs = new Tv[n];
    			int i,j,k;
    			
    			for(i=0; i<n; i++){
    				tvs[i] = new Tv(scan.nextInt(), scan.nextInt());				
    			}
    			
    			for(i=0; i<n; i++){
    				k = i;
    				
    				for(j=i+1; j<n; j++){
    					if(tvs[j].s < tvs[k].s){
    						k = j;
    					}
    				}
    				
    				Tv tv = tvs[i];
    				tvs[i] = tvs[k];
    				tvs[k] = tv;
    			}
    			
    			int[] dp = new int[n];
    			int max = dp[0] = 1;
    			
    			for(i=1; i<n; i++){
    				k = 0;
    				
    				for(j=0; j<i; j++){
    					if(tvs[j].e<=tvs[i].s && dp[j]>k){
    						k = dp[j];
    					}
    				}
    				
    				dp[i] = k+1;
    				
    				if(dp[i] > max){
    					max = dp[i];
    				}
    			}
    			
    			System.out.println(max);
    		}
    	}
    }
    
    class Tv{
    	Tv(int s, int e){
    		this.s = s;
    		this.e = e;
    	}
    	
    	int s;
    	int e;
    }
    
    • 1

    信息

    ID
    1227
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者