1247: 宝石手镯
时间限制: 1 Sec 内存限制: 128 MB
提交: 1212 解决: 782
[提交] [状态] [讨论版] [命题人:外部导入]
题目描述
贝茜在珠宝店闲逛时,买到了一个中意的手镯。
很自然地,她想从她收集的 N(1 <= N <= 3,402)块宝石中选出最好的那些镶在手镯上。
对于第i块宝石,它的重量为wi(1 <= wi <= 400),并且贝茜知道它在镶上手镯后能为自己增加的魅力值di(1 <= di <= 100)。
由于贝茜只能忍受总重量不超过M(1 <= M <= 12,880)的手镯,她可能无法把所有喜欢的宝石都镶上。
于是贝茜找到了你,告诉了你她所有宝石的属性以及她能忍受的重量,希望你能帮她计算一下,按照最合理的方案镶嵌宝石的话,她的魅力值最多能增加多少。
输入
第1行: 2个用空格隔开的整数:N 和 M
第2..N+1行: 第i+1行为2个用空格隔开的整数:wi、di,分别为第i块宝石 的重量与能为贝茜增加的魅力值
输出
输出1个整数,表示按照镶嵌要求,贝茜最多能增加的魅力值。
样例输入 Copy
4 6 1 4 2 6 3 12 2 7
样例输出 Copy
23
提示
输入说明:
贝茜收集了4块宝石,她能忍受重量最大为6的手镯。
输出说明:
贝茜把除了第二块宝石的其余所有宝石都镶上手镯,这样她能增加4+12+7=23的魅力值,并且所有宝石的重量为1+2+3 <= 6,同样符合要求。
来源/分类
import java.util.Arrays;
import java.util.Scanner;
//1247
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int M = scanner.nextInt();
int[] w = new int[N];
int[] d = new int[N];
for (int i = 0; i < N; i++) {
w[i] = scanner.nextInt();
d[i] = scanner.nextInt();
}
int[] dp = new int[M + 1];
for (int i = 0; i < N; i++) {
for (int j = M; j >= w[i]; j--) {
dp[j] = Math.max(dp[j], dp[j - w[i]] + d[i]);
}
}
System.out.println(Arrays.stream(dp).max().getAsInt());
}
}