京东笔试
京东笔试 就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]; } }#京东笔试#