Submission #955610

#TimeUsernameProblemLanguageResultExecution timeMemory
955610UCSBlKnapsack (NOI18_knapsack)Java
73 / 100
832 ms262144 KiB
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

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());
		
		long[][] dp = new long[N+1][S+1];
		
		// dp(i, j) = using the first i weights, with an upper bound of j capacity - what is the best
		// price
		
		long[][] items = new long[N+1][3];
		
		for (int i = 1; i <= N; i++) {
			st = new StringTokenizer(br.readLine());
			items[i][0] = Long.parseLong(st.nextToken());
			items[i][1] = Long.parseLong(st.nextToken());
			items[i][2] = Long.parseLong(st.nextToken());
		}
		
		for (int i = 1; i <= N; i++) {
			long pi = items[i][0];
			long wi = items[i][1];
			long ki = items[i][2];
			
			for (int j = 1; j <= S; j++) {
				for (int k = 0; k <= j/((int)wi) && k <= ((int) ki); k++) {
					dp[i][j] = Math.max(Math.max(dp[i][j], dp[i-1][j]), 
										dp[i-1][j-k*((int)wi)] + pi*((long) k));
				}
			}
		}
		
		System.out.println(dp[N][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...