多重背包問題的優化 學習筆記 AcWing 5. 多重背包問題 II(算法基礎課)

乘法原理

百度百科

乘法原理是說把多個步驟的所有方法相乘,表示整個事件所有可能的解決方法

原題

有?N�?種物品和一個容量是?V�?的背包。

第?i�?種物品最多有?si��?件,每件體積是?vi��,價值是?wi��。

求解將哪些物品裝入背包,可使物品體積總和不超過背包容量,且價值總和最大。
輸出最大價值。

輸入格式

第一行兩個整數,N,V�,�,用空格隔開,分別表示物品種數和背包容積。

接下來有?N�?行,每行三個整數?vi,wi,si��,��,��,用空格隔開,分別表示第?i�?種物品的體積、價值和數量。

輸出格式

輸出一個整數,表示最大價值。

數據范圍

0<N≤10000<�≤1000
0<V≤20000<�≤2000
0<vi,wi,si≤20000<��,��,��≤2000

提示:

本題考查多重背包的二進制優化方法。

輸入樣例
4 5
1 2 3
2 4 1
3 4 3
4 5 2
輸出樣例:
10
難度:中等
時/空限制:1s / 64MB
總通過數:75903
總嘗試數:164479
來源:背包九講 , 模板題
算法標簽

挑戰模式

原題鏈接

傳送門?

代碼

#include<bits/stdc++.h>
using namespace std;const int N=11000+10,M=2000+10;
int v[N],w[N];
int f[M];int main()
{int n,m;scanf("%d%d",&n,&m);int cnt=0;for(int i=0;i<n;i++){int a,b,s;scanf("%d%d%d",&a,&b,&s);int k=1;while(k<=s){cnt++;v[cnt]=k*a;w[cnt]=k*b;s-=k,k*=2;}if(s>0){cnt++;v[cnt]=s*a;w[cnt]=s*b;}}n=cnt;for(int i=1;i<=n;i++){for(int j=m;j>=v[i];j--){f[j]=max(f[j],f[j-v[i]]+w[i]);}}printf("%d\n",f[m]);return 0;
}

總結

一、二進制優化

?1.不優化的情況的時間復雜度是N^3,在數據范圍比較大的時候會超時,所以我們選擇二進制優化,把一維的N優化為logN,時間復雜度變為N^2*logN,可以通過這道題

2.思路是,給定了物品數目s,可以選擇0件,1件,2件,……,s件物品,一個一個循環的話需要循環s+1次才能表示所有的情況,如果我們使用二進制的話,int范圍內都只需要32位數字,就可以表示所有數字,數據范圍是2000,只需要最多11個數字,2^11=2048,2^0,2^1,2^2,...2^11,二進制表示本質和01背包就很相似,每一個數位選擇0或者是1,從而可以表示所有數字

3.注意一個一般化的情況,物品的件數s不是2的整數次冪,比如數字10,2^0=1,2^1=2,2^2=4,2^3=8,0+1+2+4+8>10,如果選擇到數字2^3=8,超過了我們最多可以選擇的件數10,這會造成理論上可以選擇多件物品,但是實際上只有10件物品可以選擇,所以我們只能選擇到2^2=4,0+1+2+4=7,再補充一個數字10-7=3,原來的0,1,2,4可以表示0~7范圍的所有數字,加上數字3之后,可以表示0~10范圍的所有數字,0,1,2,4表示0~7范圍內所有數字的方法就是二進制計數,每一個數位是否選擇該數字

- - - -:000? ? ? ? 0? ? ? ? 0

- - - - :001? ? ? ? 1? ? ? ? 1

- - - -:010? ? ? ? 2? ? ? ? 2

- - - -:011? ? ? ? 3? ? ? ? 1+2

- - - -:100? ? ? ? 4? ? ? ? 4

- - - -:101? ? ? ? 5? ? ? ? 4+1

- - - - :110? ? ? ? 6? ? ? ? 4+2

- - - - :111? ? ? ? 7? ? ? ? 4+2+1

二、代碼細節

1.表示物品的數組的容量是 1000*11(二進制優化),表示答案的數組的容量是2000,都增加10防止數組越界

2.本質是把一件物品拆成多組物品,是否選擇該組物品,從而把多重背包轉換成01背包來進行求解

3.用一個計數器來存數組下標,和單鏈表的dix類似,while循環之后加一個if特判,表示最后一種情況,和質因數分解類似,也是判斷最后處理的結果

4.原來的n件物品變成了現在的cnt件物品,因為計數器從1開始作為數下標存儲物品的體積和價值,所以套用01背包模板的時候要從1開始遍歷,01背包模板的第二層循環體積從大到小遍歷

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

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

相關文章

程序員必讀!深入解析Java線程調度算法神秘面紗!

哈嘍大家好&#xff0c;我是小米&#xff01;今天我們要聊的話題是關于Java中的線程調度算法。這可是一個技術大拿們在面試時常常拿出來考察我們的點子呢&#xff01;廢話不多說&#xff0c;讓我們一起深入了解一下吧&#xff01; 線程調度算法的背后 首先&#xff0c;讓我們…

[Linux] shell腳本之循環

一、循環定義 一組被重復執行的語句稱之為 循環體,能否繼續重復,決定循環的終止條件。 循環語句 是由循環體及循環的終止條件兩部分組成的。 二、for循環 2.1 帶列表循環 語法 for 變量名 in 取值列表do 命令序列 done 花括號用法&#xff1a; 花括號{ }和seq在for循環…

設計模式——狀態模式介紹

狀態模式是一種行為設計模式&#xff0c;它允許對象在內部狀態改變時改變它的行為。它基于對象的內部狀態而改變其行為&#xff0c;看起來好像修改了對象的類。 狀態模式的關鍵組件有三個&#xff1a;上下文(Context)、狀態(State)和具體狀態(Concrete State)。 下面是一個例…

年輕有為!2023兩院院士增選揭榜 45歲顏寧當選

大家好&#xff0c;我是極智視界&#xff0c;歡迎關注我的公眾號&#xff0c;獲取我的更多前沿科技分享 邀您加入我的知識星球「極智視界」&#xff0c;星球內有超多好玩的項目實戰源碼和資源下載&#xff0c;鏈接&#xff1a;https://t.zsxq.com/0aiNxERDq 通常&#xff0c;兩…

電商網站選擇云服務器要考慮什么?

極高的安全性 交易平臺最重要的是數據安全&#xff0c;這涉及到產品、用戶、平臺信息等&#xff0c;能夠保護數據隱私的安全&#xff0c;是網站交易的首要原則。 2020年&#xff0c;數據泄露、網絡滲透、大量數據被銷售、勒索軟件爆發......每個網站都可能成為黑客的目標&#…

CuratorFrameworkFactory.builder()方法可配置屬性

CuratorFrameworkFactory.builder()方法可以配置以下屬性&#xff1a; 1. connectString&#xff1a;ZooKeeper服務器的連接字符串。 2. sessionTimeoutMs&#xff1a;ZooKeeper會話超時時間。 3. connectionTimeoutMs&#xff1a;ZooKeeper連接超時時間。 4. retryPolicy&…

springboot自動重啟及SpringBoot Developer tools簡介

項目中引用了SpringBoot Developer tools&#xff0c;修改類后會自動重啟。 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional&…

BTS-GAN:基于MRI和條件對抗性網絡的乳腺腫瘤計算機輔助分割系統

BTS-GAN: Computer-aided segmentation system for breast tumor using MRI and conditional adversarial networks BTS-GAN&#xff1a;基于MRI和條件對抗性網絡的乳腺腫瘤計算機輔助分割系統背景貢獻實驗方法Parallel dilated convolution module&#xff08;并行擴展卷積模塊…

逸學java【初級菜鳥篇】9.5枚舉

hi&#xff0c;我是逸塵&#xff0c;一起學java吧 枚舉是信息的標志和分類 當一個變量有幾種固定可能的取值時&#xff0c;就可以將它定義為類型的枚舉。 優點&#xff1a;代碼可讀性好&#xff0c;入參約束嚴謹&#xff0c;代碼優雅&#xff0c;是最好的信息分類技術&#x…

【AI讀論文】AutoML的8年回顧:分類、綜述與趨勢

論文標題&#xff1a;Eight years of AutoML: categorisation, review and trends 論文鏈接&#xff1a;https://link.springer.com/article/10.1007/s10115-023-01935-1 本文主要圍繞自動機器學習&#xff08;AutoML&#xff09;展開了系統性的文獻綜述&#xff0c;總結了該領…

【文末送書】重磅!這本30w人都在看的Python數據分析暢銷書:更新了!

歡迎關注博主 Mindtechnist 或加入【智能科技社區】一起學習和分享Linux、C、C、Python、Matlab&#xff0c;機器人運動控制、多機器人協作&#xff0c;智能優化算法&#xff0c;濾波估計、多傳感器信息融合&#xff0c;機器學習&#xff0c;人工智能等相關領域的知識和技術。關…

div中添加el-loading(局部loading的使用)

效果&#xff1a;在div中實現el-loading <div class"content-main">{{ hotList }}</div>getHotList(columnType) {this.$nextTick(() > {var loading this.$loading({lock: true,text: "努力加載中...",spinner: "el-icon-loading&qu…

揭示卡爾曼濾波器的威力

一、說明 作為一名數據科學家&#xff0c;我們偶爾會遇到需要對趨勢進行建模以預測未來值的情況。雖然人們傾向于關注基于統計或機器學習的算法&#xff0c;但我在這里提出一個不同的選擇&#xff1a;卡爾曼濾波器&#xff08;KF&#xff09;。 1960 年代初期&#xff0c;Rudol…

天池 機器學習算法(一): 基于邏輯回歸的分類預測

pytorch實戰 課時7 神經網絡 MSE的缺點&#xff1a;偏導值在輸出概率值接近0或者接近1的時候非常小&#xff0c;這可能會造成模型剛開始訓練時&#xff0c;偏導值幾乎消失&#xff0c;模型速度非常慢。 交叉熵損失函數&#xff1a;平方損失則過于嚴格&#xff0c;需要使用更合…

開始通過 Amazon SageMaker JumpStart 在亞馬遜云科技上使用生成式 AI

目前&#xff0c;生成式 AI 正受到公眾的廣泛關注&#xff0c;人們圍繞著許多人工智能技術展開討論。很多客戶一直在詢問有關亞馬遜云科技生成式 AI 解決方案的更多信息&#xff0c;本文將為您進行解答。 這篇文章通過一個真實的客戶使用案例概述了生成式 AI&#xff0c;提供了…

感恩節99句祝福語,感恩父母老師朋友親人朋友們,永久快樂幸福

1、流星讓夜空感動&#xff0c;生死讓人生感動&#xff0c;愛情讓生活感動&#xff0c;你讓我感動&#xff0c;在感恩節真心祝福你比所有的人都開心快樂。 2、感恩節到了&#xff0c;想問候你一下&#xff0c;有太多的話語想要說&#xff0c;但是不知從何說起&#xff0c;還是用…

定位鼠標懸浮才出現的元素

第一步&#xff1a;按F12進入開發者模式 第二步&#xff1a;點擊Sources. 第三步&#xff1a;鼠標進入&#xff0c;觸發懸浮框彈出&#xff0c;然后鼠標停止不要移動。 第四步&#xff1a;按F8 或者&#xff08;Ctrl\&#xff09;&#xff0c;正常情況下&#xff0c;此時頁…

讓SOLIDWORKS Composer動畫在PPT中隨意轉換

SOLIDWORKS Composer作為一款易學易用的技術圖解軟件&#xff0c;非常適合用來給客戶展示自己的產品。這里我們教大家如何將Composer文件插入大PPT中&#xff0c;并任意切換文件&#xff0c;用以給客戶展示不用的方案和產品。 1.首先大家要安裝SOLIDWORKS Composer Player 這個…

【2021集創賽】基于ARM-M3的雙目立體視覺避障系統 SOC設計

本作品參與極術社區組織的有獎征集|秀出你的集創賽作品風采,免費電子產品等你拿~活動。 團隊介紹 參賽單位&#xff1a;上海電力大學 隊伍名稱&#xff1a;駭行隊 總決賽獎項&#xff1a;二等獎 1.摘要 隨著信息技術的發展&#xff0c;AGV&#xff08;Automated Guided Vehic…

21款奔馳GLC260L升級HUD抬頭顯示 平視儀表信息

隨著科技飛速地發展&#xff0c;從汽車領域就可以看出&#xff0c;尤其是汽車的抬頭顯示器&#xff0c;一經推出就吸引了很多的車主。 升級HUD抬頭顯示&#xff0c;HUD與汽車系統進行完整的數據信息連接&#xff0c;整合成大數據&#xff0c;然后將一些重要信息映射到車窗玻璃…