饮水入城:
题目描述:
首先这道题考验的并不是代码能力而是细心程度。仔细读题,你会发现对于每一个城市,如果要建水利设施,必须存在一个与它有公共边的比它高的城市才可以。运用贪心的算法,每次选取最高的靠近湖泊的城市进行搜索,当所有的干旱城市都建有水利设施的时候停止。当所有的靠近湖泊城市都建造了输水站而还有干旱城市没有满足条件时,需要for一遍干旱城市输出多少个没有建造水利设施。
如上图。当干旱城市需要建造水利设施时一定存在一个有公共边的比它海拔高的城市。那么当从最高点开始搜索时,保证最少能覆盖一个靠近湖泊的城市,从而减少>=1个输水站的建造。
输入描述:
输出描述:
示例1:
输入:
5,1,4,2,3
输出:
3
没测试,应该会超时,以后子再思考一下
代码:
import java.util.ArrayList;
import java.util.Scanner;
public class yc1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// ArrayList<Integer> a=new ArrayList<Integer>();
while (in.hasNextLine()) {// 注意,如果输入是多个测试用例,请通过while循环处理多个测试用例
String a0=in.nextLine();
String[] a=a0.split(",");
int[] b=new int[a.length];
for(int i=0;i<a.length;i++) {
b[i]=Integer.parseInt(a[i]);
}
System.out.println(longin(b));
}
}
public static int longin(int[] arr) {
if(arr.length==0||arr==null) {
return 0;
}
int len=arr.length;
int[] init=new int[len];
init[0]=1;
int out=Integer.MIN_VALUE;
for(int i=1;i<len;i++) {
int init0=0;
for(int j=0;j<i;j++) {
if(arr[j]<=arr[i]) {
init0=Math.max(init[j], init0);
}
}
init[i]=init0+1;
out=Math.max(init[i], init0);
}
return out;
}
}
测试用例:
/*5,1,4,2,3
3*/
yc1