• 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;
    		}
     
    
    }
    }
    
    
  • 相关阅读:
    测试覆盖(率)到底有什么用?
    重构遗留程序的一次案例学习(java程序)
    rsync学习
    一次awk脚本的重构
    哪本书是对程序员最有影响、每个程序员都该阅读的书?
    我的阅读编程书籍的好方法
    领域驱动设计和实践
    不要if else的编程
    编码规范的要点
    最牛B的编码套路
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12946701.html
Copyright © 2020-2023  润新知