广联达笔试AK---已贴代码
第一题dp,记一下该位置最大值加速查找。
第二题就是基础的贪心算法
不要找我要代码了,明天我贴出来。
第一题
package 其他.广联达; import java.util.Scanner; public class S { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int n=scanner.nextInt(); int[][] data=new int[n][3]; long[][] res=new long[n+1][5]; for (int i = 0; i < 3; i++) { for (int j = 0; j < n; j++) { data[data.length-1-j][i]=scanner.nextInt(); } } for (int i = 0; i < data.length; i++) { res[i+1][0]=data[i][0]; } res[0][0]=Long.MAX_VALUE; for (int i = 1; i < res.length; i++) { int s=data[i-1][0]; int t=data[i-1][1]; int a=data[i-1][2]; //送 int j = i-1; for (; res[j][0]<s+t; j--); res[i][1]=Math.max(res[i][1], Math.max(res[j][2]+a, res[j][1]+a)); res[i][3]=Math.max(res[i-1][3], res[i][1]); //不送 // for (int j = 0; j < i&&res[j][0]>=s; j++) { // res[i][2]=Math.max(res[i][1], Math.max(res[j][2], res[j][1])); // } //改进后 res[i][2]=Math.max(res[i-1][3],res[i-1][4]); res[i][4]=Math.max(res[i-1][4], res[i][2]); } System.out.println(Math.max(res[res.length-1][1], res[res.length-1][2])); } }
package 其他.广联达; import java.util.LinkedList; import java.util.Scanner; public class F { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int n=scanner.nextInt(); LinkedList<Integer> data=new LinkedList<>(); for (int i = 0; i < n; i++) { data.add(scanner.nextInt()); } int count=0; int len=1; int base=data.pollLast(); while (!data.isEmpty()) { if (data.peekLast()==base) { //不触发 len+=1; data.pollLast(); }else{ //触发复制 for (int i = 0; i < len&&!data.isEmpty(); i++) { data.pollLast(); } count++; len*=2; } } System.out.println(count); } }#广联达#