Submission #1144974

#TimeUsernameProblemLanguageResultExecution timeMemory
1144974uranium235Knapsack (NOI18_knapsack)Java
73 / 100
1097 ms46124 KiB
//package ojuz;

import java.io.*;
import java.util.*;

public class knapsack {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        String[] first = reader.readLine().split(" ");
        int s = Integer.parseInt(first[0]), n = Integer.parseInt(first[1]);
        int[] dp = new int[s + 1];

        for (int i = 0; i < n; i++) {
            String[] arr = reader.readLine().split(" ");
            int v = Integer.parseInt(arr[0]), w = Integer.parseInt(arr[1]), k = Integer.parseInt(arr[2]);
            k = Math.min(k, s / w);

            int log = 31 - Integer.numberOfLeadingZeros(k);
            for (int j = 0; j < log; j++) {
                for (int l = s; l >= w; l--) {
                    dp[l] = Math.max(dp[l], dp[l - w] + v);
                }
                w <<= 1;
                v <<= 1;
            }

            int mult = k - (1 << log) + 1;
            w >>= log;
            v >>= log;
            w *= mult;
            v *= mult;
            for (int j = s; j >= w; j--) {
                dp[j] = Math.max(dp[j], dp[j - w] + v);
            }
        }

        System.out.println(dp[s]);
    }
}
#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...