第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

???26516題解:動(dòng)態(tài)規(guī)劃解決完全背包問題(附代碼解析)

標(biāo)簽:
C++

https://img1.sycdn.imooc.com//5acb3c8700013dc501600160.jpg

一、题目解读

牛客226516题要求解决两类完全背包问题:普通完全背包(求最大价值)与恰好装满的完全背包(判断是否存在方案)。题目给定n个物品,每个物品有体积v和价值w,背包容量为V。需分别计算两种情况下背包能容纳的最大价值或是否存在恰好装满的方案。

二、解题思路

核心采用动态规划

问题1(普通完全背包)允许物品重复选取,使用dp数组表示容量j时的最大价值,状态转移方程为dp[j] = max(dp[j], dp[j-v[i]] + w[i]),通过遍历物品和容量构建最优解。

问题2(恰好装满)需初始化dp[0]=0(表示空背包合法),其余状态置-1,仅当dp[j-v[i]]合法时才更新dp[j],最终判断dp[V]是否非-1确定答案。

三、解题步骤

1. 输入物品数量n、背包容量V,及物品体积v和价值w数组。

2. 问题1:初始化dp1全0,外层循环物品,内层正序遍历容量,按动态规划方程更新dp1。

3. 问题2:初始化dp2,仅dp2[0]=0,其余为-1;遍历物品后正序更新容量,依赖合法前置状态计算新值。

4. 输出dp1[V]和问题2的特殊判断结果。

四、代码与注释

#include <iostream>#include <vector>#include <algorithm>using namespace std;void solve() {
    int n, V;
    cin >> n >> V;   // 输入物品数量n和背包容量V
    vector<int> v(n), w(n); // 物品体积和价值数组
    for (int i = 0; i < n; ++i) {
        cin >> v[i] >> w[i];
    }

    // 问题1:普通完全背包
    vector<int> dp1(V + 1, 0); // dp1[j]表示容量j时的最大价值
    for (int i = 0; i < n; ++i) {
        for (int j = v[i]; j <= V; ++j) { // 正序遍历容量(可重复选)
            dp1[j] = max(dp1[j], dp1[j - v[i]] + w[i]);
        }
    }
    cout << dp1[V] << endl; // 输出最大价值

    // 问题2:恰好装满的完全背包
    vector<int> dp2(V + 1, -1); // -1表示未计算,-1的更新结果仍为-1
    dp2[0] = 0; // 空背包合法
    for (int i = 0; i < n; ++i) {
        for (int j = v[i]; j <= V; ++j) {
            if (dp2[j - v[i]]!= -1) { // 仅当前置状态合法时才更新
                dp2[j] = max(dp2[j], dp2[j - v[i]] + w[i]);
            }
        }
    }
    cout << (dp2[V] == -1? 0 : dp2[V]) << endl; // 若dp2[V]为-1则无解,否则输出价值}int main() {
    solve();
    return 0;}

五、总结

本题通过动态规划巧妙解决两类完全背包问题。关键差异在于初始化和状态转移条件:普通背包允许重复选取,初始化全0;恰好装满需空背包合法,依赖合法前置状态更新。代码简洁高效,体现了动态规划在背包问题中的经典应用。

参考:信奥自学


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消