제출 #1237276

#제출 시각아이디문제언어결과실행 시간메모리
1237276kamran0708Knapsack (NOI18_knapsack)Java
73 / 100
807 ms327680 KiB
import java.util.*;

public class knapsack {

    static int n, s;
    static int[][] item;          // {value, weight, count}
    static int[][] dp;            // memo idx×currWt, -1 = unvisited

    static int solve(int idx, int currWt) {
        if (currWt > s)  return Integer.MIN_VALUE;  // overweight
        if (idx == n)    return 0;                  // no more items
        if (dp[idx][currWt] != -1) return dp[idx][currWt];

        int best = 0;
        int v = item[idx][0];
        int w = item[idx][1];
        int c = item[idx][2];

        // try taking t copies, 0 … c
        for (int t = 0; t <= c && currWt + t * w <= s; t++) {
            int candidate = t * v + solve(idx + 1, currWt + t * w);
            best = Math.max(best, candidate);
        }
        return dp[idx][currWt] = best;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        s = sc.nextInt();              // capacity
        n = sc.nextInt();              // item types
        item = new int[n][3];
        for (int i = 0; i < n; i++) {
            item[i][0] = sc.nextInt(); // value
            item[i][1] = sc.nextInt(); // weight
            item[i][2] = sc.nextInt(); // count
        }

        dp = new int[n][s + 1];
        for (int[] row : dp) Arrays.fill(row, -1);

        System.out.println(solve(0, 0));
    }
}
#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...