卡码网52. 携带研究材料
题目链接:题目页面 (kamacoder.com)
先物品后背包:
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int v = sc.nextInt();
int[] wi = new int[n];
int[] vi = new int[n];
for(int i = 0; i < n; ++i) {
wi[i] = sc.nextInt();
vi[i] = sc.nextInt();
}
int[] dp = new int[v+1];
for(int i = 0; i < n; ++i) {
for(int j = wi[i]; j < v+1; ++j) {
dp[j] = Math.max(dp[j],dp[j - wi[i]] + vi[i]);
}
}
System.out.println(dp[v]);
}
}
先背包后物品:
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int v = sc.nextInt();
int[] wi = new int[n];
int[] vi = new int[n];
for(int i = 0; i < n; ++i) {
wi[i] = sc.nextInt();
vi[i] = sc.nextInt();
}
int[] dp = new int[v+1];
for(int i = 1; i < v+1; ++i) {
for(int j = 0; j < n; ++j) {
if(wi[j] <= i)
dp[i] = Math.max(dp[i],dp[i - wi[j]] + vi[j]);
}
}
System.out.println(dp[v]);
}
}
518. 零钱兑换 II
题目链接:518. 零钱兑换 II - 力扣(LeetCode)
class Solution {
public int change(int amount, int[] coins) {
int n = coins.length;
int[] dp = new int[amount + 1];
dp[0] = 1;
for(int i = 0; i < n; ++i) {
for(int j = coins[i]; j < amount + 1; ++j) {
dp[j] += dp[j-coins[i]];
}
}
return dp[amount];
}
}
377. 组合总和 Ⅳ
题目链接:377. 组合总和 Ⅳ - 力扣(LeetCode)
class Solution {
public int combinationSum4(int[] nums, int target) {
int[] dp = new int[target + 1];
dp[0] = 1;
for(int i = 0; i < target + 1; ++i) {
for(int j = 0; j < nums.length; ++j) {
if(nums[j] <= i) {
dp[i] += dp[i-nums[j]];
}
}
}
return dp[target];
}
}