寻网站开发人员合作,济南建设银行,wordpress 下载站,做阿里云网站139、单词拆分 dp[i]#xff1a;长度为 i 的字符串可以有字典中出现的单词拼接出来。
if s[j: i] in wordDict and dp[j] true 则 dp[i] true
dp[0] true, 因为后续均由dp[0]推出。
从前向后遍历
public static boolean wordBreak(String s, ListString wordDi…139、单词拆分 dp[i]长度为 i 的字符串可以有字典中出现的单词拼接出来。
if s[j: i] in wordDict and dp[j] true 则 dp[i] true
dp[0] true, 因为后续均由dp[0]推出。
从前向后遍历
public static boolean wordBreak(String s, ListString wordDict) {HashSetString wd new HashSet(wordDict);boolean[] dp new boolean[s.length()1];dp[0] true;for (int j 1; j s.length(); j) { // 背包for (int i 0; i j; i){if (dp[i] wd.contains(s.substring(i, j))) {dp[j] true;break;}}System.out.println(Arrays.toString(dp));}return dp[s.length()];
}多重背包
多重背包即在物品重量和价值的两个维度上又多了数量。
可以转化为01背包数量为n的物品代表n个数量为1的物品。 按照01背包的思路即可解题。
import java.util.ArrayList;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);int C in.nextInt(); // 背包容量int N in.nextInt(); // 物品种类ArrayListInteger weight new ArrayList();ArrayListInteger value new ArrayList();ArrayListInteger nums new ArrayList();for (int i 0; i N; i) weight.add(in.nextInt());for (int i 0; i N; i) value.add(in.nextInt());for (int i 0; i N; i) nums.add(in.nextInt());int[] dp new int[C1];for (int i 0; i weight.size(); i) { // 物品for (int j C; j weight.get(i); j--) {for (int k 1; k nums.get(i) (j - k * weight.get(i)) 0; k) {dp[j] Math.max(dp[j], dp[j - k * weight.get(i)] k * value.get(i));}}}System.out.println(dp[C]);}
}