제출 #470885

#제출 시각아이디문제언어결과실행 시간메모리
470885SansPapyrus683Cloud Computing (CEOI18_clo)Java
54 / 100
3041 ms20676 KiB
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Comparator; /** * https://oj.uz/problem/view/CEOI18_clo * 4 * 4 2200 700 * 2 1800 10 * 20 2550 9999 * 4 2000 750 * 3 * 1 1500 300 * 6 1900 1500 * 3 2400 4550 should output 350 */ public class clo { public static void main(String[] args) throws IOException { BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); int compNum = Integer.parseInt(read.readLine()); int[][] computers = new int[compNum][]; int maxComputers = 0; for (int c = 0; c < compNum; c++) { // core number, clock rate, and price computers[c] = Arrays.stream(read.readLine().split(" ")).mapToInt(Integer::parseInt).toArray(); maxComputers += computers[c][0]; } int orderNum = Integer.parseInt(read.readLine()); int[][] orders = new int[orderNum][]; for (int c = 0; c < orderNum; c++) { // number ordered, min clock rate, and price orders[c] = Arrays.stream(read.readLine().split(" ")).mapToInt(Integer::parseInt).toArray(); } // group both the computers and orders into a single transaction array int[][] possTransactions = new int[compNum + orderNum][]; for (int t = 0; t < possTransactions.length; t++) { int[] trans; if (t < compNum) { trans = computers[t]; // we gain a negative amount of money! trans[2] = -trans[2]; } else { trans = orders[t - compNum]; // we gain a negative amount of cores lol trans[0] = -trans[0]; } possTransactions[t] = trans; } // if we sort like this, then the entire clock rate issue goes away as long as we process them in order Arrays.sort(possTransactions, Comparator.comparingInt(t -> -t[1])); long[] maxProfits = new long[maxComputers + 1]; Arrays.fill(maxProfits, Long.MIN_VALUE); maxProfits[0] = 0; for (int[] t : possTransactions) { long[] newMax = maxProfits.clone(); for (int c = 0; c <= maxComputers; c++) { int prevComp = c - t[0]; if (0 <= prevComp && prevComp <= maxComputers && maxProfits[prevComp] != Long.MIN_VALUE) { newMax[c] = Math.max(newMax[c], maxProfits[prevComp] + t[2]); } } maxProfits = newMax; } System.out.println(Arrays.stream(maxProfits).max().getAsLong()); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...