chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++中的背包問(wèn)題說(shuō)明和源碼示例

C語(yǔ)言編程學(xué)習(xí)基地 ? 來(lái)源:C語(yǔ)言編程學(xué)習(xí)基地 ? 作者:C語(yǔ)言編程學(xué)習(xí)基地 ? 2021-10-12 09:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

問(wèn)題說(shuō)明

有N件物品和一個(gè)容量為V的背包。

第i件物品的重量是w[i],價(jià)值是v[i]。

求解將哪些物品裝入背包可使這些物品的重量總和不超過(guò)背包容量,

且價(jià)值總和最大。

功能說(shuō)明

本程序用動(dòng)態(tài)規(guī)劃的思想解決了背包問(wèn)題,并用了兩種算法:迭代法、遞歸法。在迭代法中實(shí)現(xiàn)了打印背包問(wèn)題的表格。

代碼簡(jiǎn)述

通過(guò)用戶(hù)輸入數(shù)據(jù),程序輸入檢測(cè),動(dòng)態(tài)分配空間,選擇算法, 用動(dòng)態(tài)規(guī)劃的思想求解背包問(wèn)題。

迭代法:

通過(guò)遍歷n行W列,迭代每行每列的值,并把最優(yōu)解放到 n行(在數(shù)組中為第n+1行)W列(在數(shù)組中為第W+1列)中。

遞歸法:

通過(guò)每次返回前i個(gè)物品和承重為j的最優(yōu)解, 遞歸計(jì)算總背包問(wèn)題的最優(yōu)解。

源碼示例

#include #include using namespace std;
int **T = NULL;    // 存儲(chǔ)背包問(wèn)題表格的數(shù)組指針
// 返回兩個(gè)值的最大值int max(int a, int b) {  return (a > b) ? a : b;}
// 迭代法,能顯示背包問(wèn)題的表格int packIterative(int n, int W, int *w, int *v) {    // 循環(huán)遍歷n行  for (int i = 1; i <= n; ++i)  {    // 循環(huán)遍歷W列    for (int j = 1; j <= W; ++j)    {      //第i個(gè)物品能裝下,則比較包括第i個(gè)物品和不包括第i個(gè)物品,取其最大值      if (w[i] <= j)        T[i][j] = max(v[i] + T[i - 1][j - w[i]], T[i - 1][j]);
      // 第i個(gè)物品不能裝下,則遞歸裝i-1個(gè)      else        T[i][j] = T[i - 1][j];    }  }  return T[n][W];}
// 遞歸法,不支持顯示背包問(wèn)題的表格int packRecursive(int n, int W, int *w, int *v) {  // 結(jié)束條件(初始條件),i或者j為0時(shí)最大總價(jià)值為0  if (n == 0 || W == 0) {    return 0;  }  // 第i個(gè)物品不能裝下,則遞歸裝i-1個(gè)  if (w[n] > W) {    return packRecursive(n - 1, W, w, v);  }  //第i個(gè)物品能裝下,則比較包括第i個(gè)物品和不包括第i個(gè)物品,取其最大值  else {    return max(v[n] + packRecursive(n - 1, W - w[n], w, v), packRecursive(n - 1, W, w, v));  }}
// 打印背包問(wèn)題的表格void printT(int n, int W){  // 打印n行  for (auto i = 0; i <= n; i++)  {    // 打印行數(shù)    cout << i << ":	";
    // 打印W列    for (int w = 0; w <= W; w++)    {      cout << T[i][w] << "	";    }
    // 換行    cout << endl;  }}
int main() {  int *w = NULL;    // 存儲(chǔ)每件物品重量的數(shù)組指針  int *v = NULL;    // 存儲(chǔ)每件物品價(jià)值的數(shù)組指針  int n;        // 物品個(gè)數(shù)n  int W;        // 背包總承重W
  cout << "---------------- 背包問(wèn)題 ----------------" << endl;  cout << "請(qǐng)輸入物品數(shù) n (n>=0) " << endl;
  // 輸入背包數(shù)  cin >> n;
  if (cin.fail() || n < 0)  {    cout << "輸入n錯(cuò)誤!" << endl;    system("pause");    return 0;  }
  cout << "請(qǐng)輸入背包承重量 W (W>=0) " << endl;
  // 輸入背包承重量  cin >> W;
  if (cin.fail() || W < 0)  {    cout << "輸入W錯(cuò)誤!" << endl;    system("pause");    return 0;  }
  // 分配空間  // 對(duì)w和v分配n+1大小  w = new int[n + 1];  v = new int[n + 1];
  // 對(duì)T分配n+1行,并初始化為0  T = new int *[n + 1]();  // 對(duì)T分配W+1列,并初始化為0  for (auto i = 0; i <= n; i++)  {    T[i] = new int[W + 1]();  }
  // 輸入背包的重量和價(jià)值  for (auto i = 1; i <= n; i++)  {    cout << "請(qǐng)輸入第 " << i << " 個(gè)物品的重量和價(jià)值(用空格隔開(kāi))" << endl;    cin >> w[i] >> v[i];    if (cin.fail() || w[i] < 0 || v[i] < 0)    {      cout << "輸入錯(cuò)誤!" << endl;      system("pause");      return 0;    }  }
  cout << "------------------------------------------------" << endl;  cout << "請(qǐng)選擇算法:" << endl;  cout << "【1】迭代法" << endl;  cout << "【2】遞歸法" << endl;  cout << "------------------------------------------------" << endl;
  int choose;
  // 輸入算法的選擇  cin >> choose;  switch (choose)  {  case 1:  {    // 迭代法,能顯示背包問(wèn)題的表格    cout << "能裝下物品的最大價(jià)值為 " << packIterative(n, W, w, v) << endl;    cout << "------------------------------------------------" << endl;    printT(n, W);    break;  }  case 2:  {    // 遞歸法,不支持顯示背包問(wèn)題的表格    cout << "能裝下物品的最大價(jià)值為 " << packRecursive(n, W, w, v) << endl;    break;  }  default:  {    cout << "輸入錯(cuò)誤!" << endl;    break;  }  }
  cout << "------------------------------------------------" << endl;
  delete w;  delete v;  for (int i = 0; i <= n; ++i) {    delete[] T[i];  }  delete[] T;
  system("pause");  return 0;}

今天的分享就到這里了,大家要好好學(xué)C++喲~

責(zé)任編輯:haq
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7315

    瀏覽量

    93990
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2122

    瀏覽量

    76714

原文標(biāo)題:C++經(jīng)典算法問(wèn)題:背包問(wèn)題(迭代+遞歸算法)!含源碼示例

文章出處:【微信號(hào):cyuyanxuexi,微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C/C++條件編譯

    條件編譯是一種在編譯時(shí)根據(jù)條件選擇性地包含或排除部分代碼的處理方法。在 C/C++ ,條件編譯使用預(yù)處理指令 #ifdef、#endif、#else 和 #elif 來(lái)實(shí)現(xiàn)。常用的條件編譯指令有
    發(fā)表于 12-05 06:21

    C++程序異常的處理機(jī)制

    1、什么是異常處理? 有經(jīng)驗(yàn)的朋友應(yīng)該知道,在正常的CC++編程過(guò)程難免會(huì)碰到程序不按照原本設(shè)計(jì)運(yùn)行的情況。 最常見(jiàn)的有除法分母為零,數(shù)組越界,內(nèi)存分配失效、打開(kāi)相應(yīng)文件失敗等等。 一個(gè)程序
    發(fā)表于 12-02 07:12

    C/C++代碼靜態(tài)測(cè)試工具Perforce QAC 2025.3的新特性

    ?Perforce Validate??QAC?項(xiàng)目的相對(duì)/根路徑的支持。C++?分析也得到了增強(qiáng),增加了用于檢測(cè) C++?并發(fā)問(wèn)題的新檢查,并改進(jìn)了實(shí)體名稱(chēng)和實(shí)
    的頭像 發(fā)表于 10-13 18:11 ?346次閱讀
    <b class='flag-5'>C</b>/<b class='flag-5'>C++</b>代碼靜態(tài)測(cè)試工具Perforce QAC 2025.3的新特性

    技能+1!如何在樹(shù)莓派上使用C++控制GPIO?

    和PiGPIO等庫(kù),C++可用于編程控制樹(shù)莓派的GPIO引腳。它提供了更好的性能和控制能力,非常適合對(duì)速度和精度要求較高的硬件項(xiàng)目。在樹(shù)莓派社區(qū),關(guān)于“Python
    的頭像 發(fā)表于 08-06 15:33 ?3596次閱讀
    技能+1!如何在樹(shù)莓派上使用<b class='flag-5'>C++</b>控制GPIO?

    請(qǐng)問(wèn)如何在C++中使用NPU上的模型緩存?

    無(wú)法確定如何在 C++ 的 NPU 上使用模型緩存
    發(fā)表于 06-24 07:25

    在OpenVINO? C++代碼啟用 AddressSanitizer 時(shí)的內(nèi)存泄漏怎么解決?

    在 OpenVINO? C++代碼啟用 AddressSanitizer 時(shí)遇到內(nèi)存泄漏: \"#0 0xaaaab8558370 in operator new(unsigned
    發(fā)表于 06-23 07:16

    基于stm32 nucleo_L476的智能燈(操作說(shuō)明+源碼

    基于stm32 nucleo_L476的智能燈(操作說(shuō)明+源碼)推薦下載!
    發(fā)表于 05-28 21:29

    主流的 MCU 開(kāi)發(fā)語(yǔ)言為什么是 C 而不是 C++?

    在單片機(jī)的地界兒里,C語(yǔ)言穩(wěn)坐中軍帳,C++想分杯羹?難嘍。咱電子工程師天天跟那針尖大的內(nèi)存空間較勁,C++那些花里胡哨的玩意兒,在這兒真玩不轉(zhuǎn)。先說(shuō)內(nèi)存這道坎兒。您當(dāng)stm32f4的256kRAM
    的頭像 發(fā)表于 05-21 10:33 ?781次閱讀
    主流的 MCU 開(kāi)發(fā)語(yǔ)言為什么是 <b class='flag-5'>C</b> 而不是 <b class='flag-5'>C++</b>?

    uCOS III v3.08.01 移植PC Dev C++ 免虛擬機(jī)移植WinXP,Win7,Win10,Win 11

    uCOS III v3.08.01 移植PC Dev C++ 免虛擬機(jī)移植WinXP,Win7,Win10,Win 11。32位系統(tǒng)64位系統(tǒng)都可以。 這里有源碼和程序,歡迎下載測(cè)試
    發(fā)表于 04-15 20:14

    創(chuàng)建了用于OpenVINO?推理的自定義C++和Python代碼,從C++代碼獲得的結(jié)果與Python代碼不同是為什么?

    創(chuàng)建了用于OpenVINO?推理的自定義 C++ 和 Python* 代碼。 在兩個(gè)推理過(guò)程中使用相同的圖像和模型。 從 C++ 代碼獲得的結(jié)果與 Python* 代碼不同。
    發(fā)表于 03-06 06:22

    為什么無(wú)法在運(yùn)行時(shí)C++推理讀取OpenVINO?模型?

    使用模型優(yōu)化器 2021.1 版OpenVINO?轉(zhuǎn)換模型 使用 Runtime 2022.3 版本在 C++ 推理實(shí)現(xiàn) ( core.read_model()) 讀取模型OpenVINO?并
    發(fā)表于 03-05 06:17

    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類(lèi)庫(kù)案例:ThreadPoll

    1、程序簡(jiǎn)介該程序是基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類(lèi)庫(kù)的線程池處理:ThreadPoll。本案例完成如下工作:創(chuàng)建1個(gè)線程池,設(shè)置該線程池內(nèi)部有1024個(gè)線程空間。啟動(dòng)5個(gè)線程
    的頭像 發(fā)表于 02-10 18:09 ?601次閱讀
    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的<b class='flag-5'>C++</b>公共基礎(chǔ)類(lèi)庫(kù)案例:ThreadPoll

    Spire.XLS for C++組件說(shuō)明

    Spire.XLS for C++ 是一款專(zhuān)業(yè)的 C++ Excel 組件,可以用在各種 C++ 框架和應(yīng)用程序。Spire.XLS for C+
    的頭像 發(fā)表于 01-14 09:40 ?1300次閱讀
    Spire.XLS for <b class='flag-5'>C++</b>組件<b class='flag-5'>說(shuō)明</b>

    EE-112:模擬C++的類(lèi)實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《EE-112:模擬C++的類(lèi)實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 01-03 15:15 ?0次下載
    EE-112:模擬<b class='flag-5'>C++</b><b class='flag-5'>中</b>的類(lèi)實(shí)現(xiàn)

    TCP-UART透?jìng)?b class='flag-5'>示例~看完就會(huì)源碼開(kāi)放!

    今天,來(lái)分享下TCP-UART透?jìng)?b class='flag-5'>示例,源碼開(kāi)放,可根據(jù)實(shí)際需求靈活應(yīng)用。 ? 一、TCP協(xié)議概述 TCP(Transmission Control Protocol,傳輸控制協(xié)議) ——是一種面向
    的頭像 發(fā)表于 12-30 16:43 ?936次閱讀
    TCP-UART透?jìng)?b class='flag-5'>示例</b>~看完就會(huì)<b class='flag-5'>源碼</b>開(kāi)放!