leetcode打卡#day45 携带研究材料(第七期模拟笔试)、518. 零钱兑换 II、377. 组合总和 Ⅳ、爬楼梯(第八期模拟笔试)

作者 : admin 本文共1033个字,预计阅读时间需要3分钟 发布时间: 2024-06-16 共1人阅读

携带研究材料(第七期模拟笔试)

#include
#include
#include

using namespace std;

int main() {
    int N, V;
    cin >> N >> V;
    vector weights(N+1);
    vector values(V+1);
    int w, v;
    
    for (int i = 0; i > w >> v;
        weights.push_back(w);
        values.push_back(v);
    }
    
    vector pd(N+1, 0);
    
    //先遍历背包容量
    for (int i = 0; i < V; i++) {
        //再遍历物品
        for (int j = 0; j = 0) pd[i] = max(pd[i], pd[i-weights[j]] + values[j]);
        }
    }
    cout << pd[V];
    return 0;
    
}

518. 零钱兑换 II

//不包含顺序
class Solution {
public:
    int change(int amount, vector& coins) {
        int n = coins.size();
        //凑成amount的组合数
        vector pd(amount + 1, 0);
        pd[0] = 1;
        //先遍历物品
        for (int i = 0; i < n; i++) {
            //再遍历容量
            for (int j = coins[i]; j <= amount; j++) {
                pd[j] += pd[j - coins[i]];
            }
        }
        return pd[amount];
    }
};

377. 组合总和 Ⅳ

//包含顺序
class Solution {
public:
    int combinationSum4(vector& nums, int target) {
        //目标为i的组合数
        vector dp(target+1, 0);
        int n = nums.size();
        dp[0] = 1;
        //先容量再物体 -- 排序数
        for (int i = 0; i <= target; i++) {
            //遍历背包
            for (int j = 0; j = 0 && dp[i] < INT_MAX - dp[i - nums[j]]) dp[i] += dp[i - nums[j]];
            }
        }
        return dp[target];
    }
};

爬楼梯(第八期模拟笔试)

#include
#include
#include

using namespace std;

int main() {
    int m, n;
    cin >> n >> m;
    vector dp(n+1, 0);
    dp[0] = 1;
    //包含顺序,排序:先容量再物品
    for (int i = 0; i <= n; i++) {
        for (int j = 1; j = 0) dp[i] += dp[i - j];
        }
    }
    cout << dp[n] << endl;
    return 0;
}

本站无任何商业行为
个人在线分享 » leetcode打卡#day45 携带研究材料(第七期模拟笔试)、518. 零钱兑换 II、377. 组合总和 Ⅳ、爬楼梯(第八期模拟笔试)
E-->