01背包外层控制物品
内层控制重量,从大到小,从小到大会重复
多重背包外层控制重量
内层控制物品
// for(int i = 0; i < wordDict.size(); i++) // { // int m = wordDict[i].size(); // for(int j = s.length() - 1; j >= m - 1; j--) // { // int k = j; // while(k >= j - m + 1) // { // if(s[k] != wordDict[i][m - 1 - (j - k)]) // break; // k--; // } // if(k >= j - m + 1) continue; // if(j - m < 0) dp[j] = max(dp[j], m); // else dp[j] = max(dp[j], dp[j - m] + m); // cout << j << " " << dp[j] << endl; // } // } for(int j = 0; j < s.length(); j++) { for(int i = 0; i < wordDict.size(); i++) { int m = wordDict[i].size(); if(j - m + 1 >= 0) { int k = j; while(k >= j - m + 1) { if(s[k] != wordDict[i][m - 1 - (j - k)]) break; k--; } if(k >= j - m + 1) continue; if(j - m < 0) dp[j] = max(dp[j], m); else dp[j] = max(dp[j], dp[j - m] + m); } } }