广联达笔试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);
}
}
#广联达#
查看10道真题和解析