139. 单词拆分
题目
链接
代码
class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
boolean[] dp = new boolean[s.length()+1];
dp[0] = true;
for (int i = 1; i <= s.length(); i++) {
for (String word : wordDict) {
int len = word.length();
if (i >= len && dp[i - len] && word.equals(s.substring(i - len, i))) {
dp[i] = true;
break;
}
}
}
return dp[s.length()];
}
}
多重背包
题目
链接
代码
import java.util.*;
class Main{
public static void main(String [] args) {
Scanner sc = new Scanner(System.in);
int bagSize = sc.nextInt();
int n = sc.nextInt();
int[] weight = new int[n];
int[] value = new int[n];
int[] nums = new int[n];
for (int i = 0; i < n; i++) weight[i] = sc.nextInt();
for (int i = 0; i < n; i++) value[i] = sc.nextInt();
for (int i = 0; i < n; i++) nums[i] = sc.nextInt();
int[] dp = new int[bagSize + 1];
for(int i = 0;i<n;i++){
for(int j =bagSize;j>=weight[i];j--){
for(int k = 1;k<=nums[i]&&j- k*weight[i]>=0;k++){
dp[j] = Math.max(dp[j],dp[j- k*weight[i]]+k*value[i]);
}
}
}
System.out.println(dp[bagSize]);
}
}