이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
import java.util.*;
import java.io.*;
public class knapsack {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int S = Integer.parseInt(st.nextToken());
int N = Integer.parseInt(st.nextToken());
ArrayList<Pair>[] items = new ArrayList[S+1];
for(int i = 0; i <= S; i++) items[i] = new ArrayList<>();
for(int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
int V = Integer.parseInt(st.nextToken());
int W = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
items[W].add(new Pair(V, K));
}
br.close();
for(int i = 0; i <= S; i++) Collections.sort(items[i], (a, b) -> b.a - a.a);
long[] dp = new long[S+1];
for(int w = 1; w <= S; w++) {
// System.out.println("w: " + w);
for(int s = S; s >= 1; s--) {
int currI = 0, currCnt = 0, val = 0;
for(int cnt = 1; cnt * w <= s && currI < items[w].size(); cnt++) {
val += items[w].get(currI).a;
if(++currCnt == items[w].get(currI).b) {
currCnt = 0;
// System.out.println("cnt: " + cnt + " incremeneting currI");
currI++;
}
dp[s] = Math.max(dp[s], dp[s-cnt*w] + val);
}
}
// for(int s = 0; s <= S; s++)
// System.out.print(dp[s] + " ");
// System.out.println();
}
System.out.println(dp[S]);
}
public static class Pair{
int a, b;
Pair(int a, int b) {
this.a = a;
this.b = b;
}
}
}
컴파일 시 표준 에러 (stderr) 메시지
Note: knapsack.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |