Compartir tecnología

31. 1049. El peso de la última piedra II, 494. Suma objetivo, 474. Unos y ceros

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

  1. class Solution {
  2. public:
  3. int lastStoneWeightII(vector<int>& stones) {
  4. int sum = 0;
  5. for(int stone : stones) sum += stone;
  6. int bagSize = sum /2;
  7. vector<int> dp(bagSize + 1, 0);
  8. for(int i = 0; i < stones.size(); i++){ //遍历物品
  9. for(int j = bagSize; j >= stones[i]; j--){ //遍历背包
  10. dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);
  11. }
  12. }
  13. return sum - 2*dp[bagSize];
  14. }
  15. };

  1. class Solution {
  2. public:
  3. int findTargetSumWays(vector<int>& nums, int target) {
  4. int ans = 0, sum = 0;
  5. for(int num : nums) sum += num;
  6. if((sum - target) % 2 != 0 || abs(sum) < abs(target)) return 0;
  7. int bagSize = (sum - target)/2;
  8. // dp[j] 表示:填满j(包括j)这么大容积的包,有dp[j]种方法
  9. vector<int> dp(bagSize + 1, 0);
  10. dp[0] = 1;
  11. for(int i = 0; i < nums.size(); i++){
  12. for(int j = bagSize; j >= nums[i]; j--){
  13. dp[j] += dp[j - nums[i]]; //注意理解递推公式!!!!!!
  14. }
  15. }
  16. return dp[bagSize];
  17. }
  18. };

Los elementos de la matriz de cadenas en esta pregunta son elementos, ¡y cada elemento es uno!Y m y n equivalen a una mochila, una mochila bidimensional. ¡Preste atención para comprender el significado de la longitud máxima del subconjunto en la pregunta! ! ! ! ! !

  1. class Solution {
  2. public:
  3. int findMaxForm(vector<string>& strs, int m, int n) {
  4. // dp[i][j]:最多有i个0和j个1的strs的最大子集的大小为dp[i][j]。
  5. vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0)); //默认初始化0
  6. for(string str : strs){ //遍历物品
  7. int zeroNum = 0, oneNum= 0;
  8. for(char c : str){
  9. if(c == '0') zeroNum++;
  10. else oneNum++;
  11. }
  12. for(int i = m; i >= zeroNum; i--){ //遍历背包容量且从后向前遍历!
  13. for(int j = n; j >= oneNum; j--){
  14. dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);
  15. }
  16. }
  17. }
  18. return dp[m][n];
  19. }
  20. };