京东笔试
京东笔试 就A了一道
第二道就是简单的模拟啊 不知道为什么一个测试用例都不能通过
我的思路是
首先看两个物种是否相同 相同回合直接结束
两个都没有暴露 回合结束
不同的话 第一种情况是人的暴露了 直接开始战斗
第二种情况 人没有暴露 兽暴露了 决策后战斗 兽就死
靠 正准备写第三种情况 有一方已经死了也直接回合结束 才想起来代码里面没写
接着是第三题 背包问题 带有条件的背包问题 自己写的用例都过了 测试用例只有百分之五
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
int N = in.nextInt();
int T = in.nextInt();
int[] t1 = new int[N];
int[] t2 = new int[N];
int[] s1 = new int[N];
int[] s2 = new int[N];
for(int i = 0; i < N; i ++){
t1[i] = in.nextInt();
s1[i] = in.nextInt();
t2[i] = in.nextInt();
s2[i] = in.nextInt();
}
int[] ans = solute(N, T, t1, t2, s1, s2);
for(int i = 0; i < N; i ++){
if(ans[i] == -1){
System.out.print("F");
}else if(ans[i] == 1){
System.out.print("B");
}else{
System.out.print("A");
}
}
}
public static int[] solute(int N, int T, int[] t1, int[] t2, int[] s1, int[] s2){
int[] ans = new int[N];
int[][][] res = new int[T + 1][N][N];
// 还是背包问题
int[][] dp = new int[T + 1][N];
// dp[i][j] i时间内代表前几门课中可以拿到的最高分
for(int i = 1; i <= T; i ++){
for(int j = 0; j < N; j ++){
//两种情况装第一个或者装第二个 或者都不装
int price1 = 0;
int price2 = 0;
int price3 = 0;
if(j == 0){
if(i - t1[j] >= 0){
price1 = s1[j];
}
if(i - t2[j] >= 0){
price2 = s2[j];
}
}else{
if(i - t1[j] >= 0){
price1 = dp[i - t1[j]][j - 1] + s1[j];
}
if(i - t2[j] >= 0){
price2 = dp[i - t2[j]][j - 1] + s2[j];
}
price3 = dp[i][j - 1];
}
int max = Math.max(price1, price2);
max = Math.max(max, price3);
if(max == price3){
if(j > 0){
res[i][j] = res[i][j - 1];
}
res[i][j][j] = -1;
}else if(max == price2){
ans[j] = 1;
if(j > 0){
res[i][j] = res[i - t2[j]][j - 1];
}
res[i][j][j] = 1;
}else{
ans[j] = 2;
if(j > 0)
res[i][j] = res[i - t1[j]][j - 1];
res[i][j][j] = 2;
}
dp[i][j] = max;
}
}
return res[T][N - 1];
}
}
#京东笔试#

查看15道真题和解析