zoukankan      html  css  js  c++  java
  • Java实现UVA10131越大越聪明(蓝桥杯每周一题)

    10131越大越聪明(蓝桥杯每周一题)

    [问题描述]
    一些人认为,大象的体型越大,脑子越聪明。为了反驳这一错误观点,你想要分析一组大象的数据,找出尽量
    多的大象组成一个体重严格递增但 IQ 严格递减的序列。

    [输入]
    输入包含若干大象的数据,每行一头大象,直到输入结束。每头大象的数据包括两个整数:第一个是以千克为
    单位的体重,第二个是以整百为单位的 IQ 指数。两个整数均在 1 到 10000之间。输入最多包含 1000 头
    大象。两头大象可能有相同的体重,或者相同的 IQ,甚至体重和 IQ 都相同。

    [输出]
    输出第一行应当包括一个整数 n,为找到的大象序列的长度。接下来的 n 行,每行包含一个正整数,表示一
    头大象。用 W[i] 和 S[i] 表示输入数据中第 i 行的两个数,则若找到的这一序列为 a[1],a[2],
    … ,a[n],则必须有:

    W [a[1]] < W [a[2]] < … < W [a[n]] 和 S[a[1]] > S[a[2]] > … > S[a[n]]i

    这里的 n 应当是最大可能值。所有不等关系均为严格不相等:体重严格递增,而 IQ 严格递减。
    如果存在多组解,你的程序只需输出任何一个解。

    [样例输入]
    6008 1300
    6000 2100
    500 2000
    1000 4000
    1100 3000
    6000 2000
    8000 1400
    6000 1200
    2000 1900

    [样例输出]
    4
    4
    5
    9
    7

    解释:符合题意的最长序列长度为4,按顺序是
    第4行 1000 4000
    第5行 1100 3000
    第9行 2000 1900
    第7行 8000 1400

    欢迎评论,~~滑稽

     
    
    import java.util.Scanner;
    
    public class Demo102 {
    	static  int []w = new int[1000];
    	static  int []s = new int[1000];
    static	int n = 9;
    public static void main(String[] args) {
    
    	Scanner sc = new Scanner(System.in);
    	for (int i = 1; i <=9; i++)
    	{
    		w[i]=sc.nextInt();
    		s[i]=sc.nextInt();
    		 
    	}
     
     
    	int[] d = new int [1000];
    	d[9] = 1;
    	//dp的初始值设置的最后一位
    	//这里是把i从后向前
    	//其实我的dp数组是从前向后的,
    	//最后更新的就是从i=1,然后j》1《=n证明是整个数组
    	//这里如果把i从前向后,j就要从后向前,并且后面输出就需要从后向前	很烦
    	for (int i = n - 1; i >= 1; i--){
    		d[i] = 1;
    		for (int j = i + 1; j <= n; j++){
    			if (w[i]<w[j] && s[i]>s[j])
    				if (d[i] < d[j] + 1)
    					d[i] = d[j] + 1;
    		}
    	}
    	
    	//find max
    	int start = 1;
    	for (int i = 2; i <= n; i++)
    		if (d[i] > d[start])start = i;
    	
    	System.out.println(d[start]);
    System.out.println(start);
    for (int i = 1; i <=n;i++)
    	//这里在不断的让节点替换,也就是上面dp过程时候的逆推
    		if (w[start]<w[i] && s[start]>s[i] && d[start] == d[i] + 1)
    		{
    			System.out.println(i);
    			start = i;
    		}
     
    
    }
    }
    
    
  • 相关阅读:
    算法训练 P1103
    算法训练 表达式计算
    算法训练 表达式计算
    基础练习 时间转换
    基础练习 字符串对比
    Codeforces 527D Clique Problem
    Codeforces 527C Glass Carving
    Codeforces 527B Error Correct System
    Codeforces 527A Glass Carving
    Topcoder SRM 655 DIV1 250 CountryGroupHard
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075397.html
Copyright © 2011-2022 走看看