六、分組背包

六、分組背包

  • 題記
  • 算法
  • 題目
  • 代碼

題記

一個旅行者有一個最多能裝V公斤的背包和有N件物品,它們的重量分別是W[1],W[2],…,W[n],它們的價值分別為C[1],C[2],…,C[n]。這些物品被劃分為若干組,每組中的物品互相沖突,最多選一件。求解將哪些物品裝入背包可使這些物品的費用總和不超過背包容量,且價值總和最大。

算法

這個問題變成了每組物品有若干種策略:是選擇本組的某一件,還是一件都不選。也就是說設f[k][v]表示前k組物品花費費用v能取得的最大權值,則有 f [ k ] [ v ] = m a x f [ k ? 1 ] [ v ] , f [ k ? 1 ] [ v ? w [ i ] ] + c [ i ] (物品 i 屬于第 k 組) f[k][v]=max{f[k-1][v],f[k-1][v-w[i]]+c[i]}(物品i屬于第k組) f[k][v]=maxf[k?1][v],f[k?1][v?w[i]]+c[i](物品i屬于第k組)
使用一維數組的偽代碼如下:

for 所有的組 kfor v=V..0for 所有的 i 屬于組 kf[v]=max(f[v],f[v-w[i]]+c[i])

題目

1272:【例9.16】分組背包
【題目描述】
一個旅行者有一個最多能裝V公斤的背包,現在有n件物品,它們的重量分別是W1,W2,…,Wn,它們的價值分別為C1,C2,…,Cn。這些物品被劃分為若干組,每組中的物品互相沖突,最多選一件。求解將哪些物品裝入背包可使這些物品的費用總和不超過背包容量,且價值總和最大。

【輸入】
第一行:三個整數,V(背包容量,V≤200),N(物品數量,N≤30)和T(最大組號,T≤10);

第2…N+1行:每行三個整數Wi,Ci,P,表示每個物品的重量,價值,所屬組號。

【輸出】
僅一行,一個數,表示最大總價值。

【輸入樣例】

10 6 3
2 1 1
3 3 1
4 8 2
6 9 2
2 8 3
3 9 3

【輸出樣例】

20

代碼

#include<bits/stdc++.h>
using namespace std;
int n,v,t;
int w[310],c[310],a[310][310],f[310];
//a[p][0]數組記錄每組有多少物品 
int main() {cin>>v>>n>>t;for(int i=1; i<=n; i++) {int p;cin>>w[i]>>c[i]>>p;a[p][++a[p][0]]=i; }for(int p=1; p<=t; p++)for(int j=v; j>=0; j--)for(int i=1; i<=a[p][0]; i++)//循環每一組數據中的物品 if(j>=w[a[p][i]])//保證數組不會越界 f[j]=max(f[j],f[j-w[a[p][i]]]+c[a[p][i]]);//計算最大價值 cout<<f[v];//輸出在v公斤時的最大價值 return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42435.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42435.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42435.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【es6】函數參數設置默認值

1、es6之前的函數參數默認值寫法 1.1、使用短路或||的寫法 當y為空時&#xff0c;y判斷為false &#xff0c;走||右邊的&#xff0c;所以y world;當y不為空時&#xff0c;y判斷為true&#xff0c;不需要再運行||右邊的&#xff0c;所以 y y function log(x, y) {y y || W…

數據的深海潛行:數據湖、數據倉庫與數據湖庫之間的微妙關系

導言&#xff1a;數據的重要性與存儲挑戰 在這個信息爆炸的時代&#xff0c;數據已經成為企業的核心資產&#xff0c;而如何高效、安全、便捷地存儲這些數據&#xff0c;更是每個組織面臨的重大挑戰。 數據作為組織的核心資產 數據在過去的幾十年里從一個輔助工具演變成企業的…

Ubuntu 20.04(服務器版)安裝 Anaconda

0、Anaconda介紹 Anaconda是一個開源的Python發行版本&#xff0c;包含了包括Python、Conda、科學計算庫等180多個科學包及其依賴項。因此&#xff0c;安裝了Anaconda就不用再單獨安裝CUDA、Python等。 CUDA&#xff0c;在進行深度學習的時候&#xff0c;需要用到GPU&#xf…

操作符詳解上(非常詳細)

目錄 二進制介紹二進制2進制轉10進制10進制轉2進制數字2進制轉8進制和16進制2進制轉8進制2進制轉16進制 原碼、反碼、補碼移位操作符左移操作符右移操作符 位操作符&#xff1a;&、|、^逗號表達式 二進制介紹 在初學計算機時我們常常會聽到2進制、8進制、10進制、16進制……

C++中String的語法及常用接口用法

在C語言中&#xff0c;string是一個標準庫類&#xff08;class&#xff09;&#xff0c;用于處理字符串&#xff0c;它提供了一種更高級、更便捷的字符串操作方式&#xff0c;string 類提供了一系列成員函數和重載運算符&#xff0c;以便于對字符串進行操作和處理。 一、string…

scala TraversableOnce

scala TraversableOnce 1. 由來 TraversableOnce是Scala中的一個特質&#xff08;trait&#xff09;&#xff0c;它定義了一組操作&#xff0c;用于遍歷和處理集合類型的元素。它是Scala集合層次結構中的基本概念之一。 2. 示例 以下是使用TraversableOnce的簡單示例&#…

Redis高可用:主從復制詳解

目錄 1.什么是主從復制&#xff1f; 2.優勢 3.主從復制的原理 4.全量復制和增量復制 4.1 全量復制 4.2 增量復制 5.相關問題總結 5.1 當主服務器不進行持久化時復制的安全性 5.2 為什么主從全量復制使用RDB而不使用AOF&#xff1f; 5.3 為什么還有無磁盤復制模式&#xff…

C# 一種求平方根的方法 立方根也可以 極大 極小都可以

不知道研究這些干啥&#xff0c;純純的浪費時間。。。 public static double TQSquare(double number){Random random1 new Random(DateTime.Now.Millisecond);double x1 0, resultX1 0, diff 9999999999, diffTemporary 0;for (int i 0; i < 654321; i){if (random1…

怎么做Tik Tok海外娛樂公會呢?新加坡市場怎么樣?

一、為什么選擇TikTok直播 1. 海外市場潛力巨大 ? 自2016年始&#xff0c;多家直播平臺陸續拓展至東南亞、中東、俄羅斯、日韓、歐美、拉美等地區。 ? 海外市場作為直播發展新藍海&#xff0c;2021年直播行業整申請cmxyci體規模達百億美元&#xff0c;并維持高速增長。 &a…

C++初階語法——內部類

前言&#xff1a;內部類&#xff0c;顧名思義是定義在類中的類&#xff0c;許多人會以為它屬于外部的類&#xff0c;實際上并不是&#xff0c;它們是兩個獨立的類&#xff0c;但是內部類受外部類類域的限制。 目錄 一.概念二.特性1.內部類和外部類相互獨立2.內部類是外部類的友…

10,遍歷任意參

遍歷可變參數 遍歷可變參數獲取可變參數大小通過遞歸方式遍歷可變參數通過可變參數特性來求和 遍歷可變參數 #pragma oncetemplate<class ... ParamTypes> void Func(paramTypes &... param) {}可以看作是有一個結構體里面裝滿了參數&#xff0c;把結構體放到…中。…

Git多版本并行開發實踐

本文目的&#xff1a; 實現多個項目同時進行的git多版本管理工作流。 名詞解釋&#xff1a; feature-XXXX&#xff1a;特性分支指CCS中一個項目或者一個迭代&#xff0c;在該分支上開發&#xff0c;完成后&#xff0c;合并&#xff0c;最后&#xff0c;刪除該分支&#xff0c;…

【廣州虛擬現實開發】VR智能中控系統進一步提高VR教學管理水平

隨著科技的不斷發展&#xff0c;虛擬現實(VR)技術已經逐漸走進了人們的生活。在教育領域&#xff0c;VR技術也得到了廣泛的應用&#xff0c;尤其是在教學終端中控系統方面。那么&#xff0c;廣州華銳互動開發的VR智能中控系統對學校有何益處呢&#xff1f; 首先&#xff0c;VR智…

RocketMQ(模式詳解,安裝)及控制臺安裝

下載 環境 64位操作系統&#xff0c;推薦 Linux/Unix/macOS 64位 JDK 1.8下載地址 https://rocketmq.apache.org/zh/download/ RocketMQ 的安裝包分為兩種&#xff0c;二進制包和源碼包。 二進制包是已經編譯完成后可以直接運行的&#xff0c;源碼包是需要編譯后運行的。 單…

LVS負載均衡DR(直接路由)模式

在LVS&#xff08;Linux Virtual Server&#xff09;負載均衡中的DR&#xff08;Direct Routing&#xff09;模式下&#xff0c;數據包的流向如下&#xff1a; 客戶端發送請求到負載均衡器&#xff08;LVS&#xff09;的虛擬IP&#xff08;VIP&#xff09;。負載均衡器&#x…

基于C++ 的OpenCV繪制多邊形,多邊形多條邊用不用的顏色繪制

使用基于C的OpenCV庫來繪制多邊形&#xff0c;并且為多邊形的不同邊使用不同的顏色&#xff0c;可以按照以下步驟進行操作&#xff1a; 首先&#xff0c;確保你已經安裝了OpenCV庫并配置好了你的開發環境。 導入必要的頭文件&#xff1a; #include <opencv2/opencv.hpp&g…

Bryntum Scheduler Pro 5.5.1 Crack

BRYNTUM 調度程序專業版,專業的日程安排小部件 Bryntum Scheduler Pro 5.5.1 一個專業有大腦的調度UI組件。Scheduler Pro 可幫助您安排任務&#xff0c;同時考慮資源和任務的可用性。 連接您的任務 讓 Scheduler Pro 處理剩下的事情。它將根據您定義的鏈接安排您的任務并遵守任…

BNC連接器市場分析:全球BNC連接器市場規模不斷增長

產品定義及統計范圍 BNC&#xff08;Bayonet-Neill-Concelman&#xff09;連接器是一種通常用于視頻和音頻信號傳輸的電連接器。它是以其兩位發明者Paul Neill和Carl Concelman的名字命名的&#xff0c;他們在20世紀40年代末開發了這種連接器。BNC連接器是一種設計用于同軸電纜…

ansible 修改遠程主機nginx配置文件

安裝ansible brew install ansible 或者 pip3 install ansible 添加遠程主機 設置秘鑰 mac登錄遠程主機 ssh -p 5700 root192.168.123.211 ssh localhost #設置雙機信任 ssh-kyegen -t rsa #設置主機兩邊的ssh配置文件 vi /etc/ssh/sshd_config/ PermitRootL…

UniApp 制作高德地圖插件

1、下載Uni插件項目 在Uni官網下載Uni插件項目&#xff0c;并參考官網插件項目創建插件項目. 開發者須知 | uni小程序SDK 如果下載下來項目運行不了可以參考下面鏈接進行處理 UniApp原生插件制作_wangdaoyin2010的博客-CSDN博客 2、引入高德SDK 2.1 在高德官網下載對應SD…