算法 BISHI53 [P1080] 国王游戏(简化版) 流程图 求解代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 static class Minister{ long a; long b; Minister(long a,long b){ this.a = a; this.b = b; } } public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out)); int n = Integer.parseInt(br.readLine().trim()); String[] str = br.readLine().trim().split("\\s+"); long a0 = Long.parseLong(str[0]); Minister[] ministers = new Minister[n]; for(int i=0;i<n;i++){ String[] ministerStr = br.readLine().trim().split("\\s+"); long a = Long.parseLong(ministerStr[0]); long b = Long.parseLong(ministerStr[1]); ministers[i]=new Minister(a, b); } Arrays.sort(ministers,(x,y)->Long.compare(x.a*x.b, y.a*y.b)); // 计算最大金币数 long maxCoin = 0; long productA = a0; // 前序左手数的乘积(初始为国王的a0) for (Minister m : ministers) { // 当前大臣的金币数 = 前序乘积 / 当前b long coin = productA / m.b; // 更新最大金币数 if (coin > maxCoin) { maxCoin = coin; } // 前序乘积 *= 当前大臣的a productA *= m.a; } out.println(maxCoin); out.flush(); out.close(); br.close(); }