Vijos P1133 裝箱問題(動態規劃,01揹包,NOIP)
noip2001普及組第四題
樣例分析
輸入容積24,6件物品 因為容量最多可達20000,為節省空間,只用一維陣列,用f[j]表示在容積為j時所裝物品所佔用的最大體積 對每一件物品,有放或不放兩種策略,不放,則體積仍為之前的f[j];放,則須留有足夠的空間,並佔用一定的體積,即f[j-v]+v 為了保證每件物品只取一次,所以用倒序迴圈,保證裝過的物品不會重複裝入 題目要求的是剩餘空間,即用最大容量c-f[c]程式碼
#include <iostream> using namespace std; int c,n,v,f[20002]; int main() { cin>>c>>n; for(int i=1;i<=n;i++) { cin>>v; for(int j=c;j>=v;j--) f[j]=max(f[j],f[j-v]+v); } cout<<c-f[c]<<endl; return 0; }
相關推薦
動態規劃之01揹包,完全揹包,分組揹包
一:01揹包 每樣物品只能取一件 狀態轉移方程 f[i][v]=max(f[i-1][v],f[i-1][v-weight[i]]+cost[i]) f[i][v]表示前i件物品裝入v的空間裡的最大價值,考慮第i件物品是否放入的問題,一種是不放入那就是前i-1件物品放入v中
Vijos P1133 裝箱問題(動態規劃,01揹包,NOIP)
noip2001普及組第四題 樣例分析 輸入容積24,6件物品 因為容量最多可達20000,為節省空間,只用一維陣列,用f[j]表示在容積為j時所裝物品所佔用的最大體積 對每一件物品,有放或不放兩種策略,不放,則體積仍為之前的f[j];放,則須留有足夠的空間,並佔用一定的體積,即f[j-v]+v 為了保
POJ-2184 Cow Exhibition 【動態規劃DP+01揹包變換】
題目傳送門 題目:共有N頭牛,接下來N行是每頭牛的智商和情商,從這些牛中任意選取若干頭牛,使得牛的智商和+情商和最大,同時智商和(TS),情商和(TF)都不小於0。 題解:以智商作為容量,求前i頭牛在智商為j的情況下的最大情商 。因為有負數,所以容量擴大100000,修改dp陣
【leetcode】動態規劃之01揹包問題
先學會手動填動態規劃的表 後面的顏色塊值是根據前面的顏色塊值計算出來的,不懂就留言 #include<iostream> #include<vector> using namespace std; int Knapsack(vector<i
【動態規劃】--01揹包問題
o1揹包問題:一個揹包體積為V, 現有n個物品,第i個物品體積為w[i],價值為c[i]。問在不超出揹包 容量前提下,揹包 最多能裝下多少價值的物品。 之所以叫01揹包是因為這類題都可以歸結為第i個物品 放還是不放問題。這裡用二維陣列表示(當然也可用一維) 若第i個物品放
動態規劃之01揹包問題及leetcode例項
01揹包問題 這篇文章講的很清楚,我這裡就不贅述了。 leetcode problem 416 描述 Given a non-empty array containing only positive integers, find if th
動態規劃解決01揹包問題
一、問題描述:有n 個物品,它們有各自的重量和價值,現有給定容量的揹包,如何讓揹包裡裝入的物品具有最大的價值總和? 二、總體思路:根據動態規劃解題步驟(問題抽象化、建立模型、尋找約束條件、判斷是否滿足最優性原理、找大問題與小問題的遞推關係式、填表、尋找解組成)找出01揹包問題的最優解以及解組成,然後編寫程式碼
再學動態規劃之 01揹包
寫了之後,發現這題跟01揹包還有點區別。但是寫看這個吧。 暴力搜尋的方法。就是每個取或者不去。 class Solution(object): def getS(self, arr, index, target): if target ==
動態規劃求解01揹包問題-買糖果(京東實習筆試題)
網址連結 思路 之前想的是如果使用揹包問題求解,則問題的空間複雜度很大,這個只包含1和2兩種體積的方法,因此可以適當簡化。 我看了別人提交的答案,直接使用dp,提交了也可以AC。。 程式碼 #include <cstdlib> #in
動態規劃之01揹包問題
給定n種物品和一個揹包,物品i的重量是w[i],其價值是v[i],所有物品的重量和價值都是非負的,揹包的容量是C。我們限定每種物品只能選擇0個或者1個。問應該如何選擇裝入揹包的物品,使得裝入揹包中物品的
演算法基礎-動態規劃 (1) 01揹包問題
最近閒的無聊,演算法一直是弱項,正好hihocoder上面開始了每週的比賽, 這周的題目是01揹包問題。正好歸納和總結一下。 所有的動態規劃問題都兩個特點: 1、重複子問題:一個問題可以轉化成幾個同類型的子問題。 2、後無關性:前一個問題產生的決策和結果,對下一個問題沒有影
hdu1024HDU 1024 Max Sum Plus Plus(動態規劃 很詳很詳解)
Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6725 Ac
回溯法總結+四個小例題(裝載問題,01揹包,n後,最大團,m著色)
目錄 回溯法的基本策略 回溯法的基本策略 回溯法的解空間 回溯法基本思想 回溯法解題步驟 遞歸回溯和迭代回溯 子集樹和排列樹 裝載問題 01揹包問題回溯法求解 n後問題 圖的最大團問題 圖的m著色
揹包問題小總結 習題(動態規劃01揹包(第k優解)完全揹包,多重揹包)acm杭電HDU2639,HDU2602,HDU1114,HDU2191
1、01揹包(每種物品只有一個) 題目 有N件物品和一個容量為V的揹包。第i件物品的費用是c[i],價值是w[i]。 求解將哪些物 品裝入揹包可使價值總和最大。 基本思路 這是最基礎的揹包問題,特點是:每種物品僅有一件,可以選擇放或不放。 用子問題定義狀態:
Vijos P1218 數字遊戲(動態規劃,環形DP)
丁丁最近沉迷於一個數字遊戲之中。這個遊戲看似簡單,但丁丁在研究了許多天之後卻發覺原來在簡單的規則下想要贏得這個遊戲並不那麼容易。遊戲是這樣的,在你面前有一圈整數(一共n個),你要按順序將其分為m個部分,各部分內的數字相加,相加所得的m個結果對10取模後再相乘,最終得到一個數k。遊戲的要求是使你所得的k最大或
c++學習筆記:動態規劃(最長公共子序列,01揹包問題,金錢兌換問題)
/* 參考書:演算法設計技巧與分析 M.H.Alsuwaiyel著 吳偉旭 方世昌譯 ---------------------------------------------------------------- 1.遞迴 將問題分成相似的子問題 1.1Fa
HDOJ 題目2602 Bone Collector(動態規劃,01揹包)
Bone Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 29252 Accepted
【BZOJ4872】分手是祝願(動態規劃,數學期望)
esp math map ostream pac mes ++i rac define 【BZOJ4872】分手是祝願(動態規劃,數學期望) 題面 BZOJ 題解 對於一個狀態,如何求解當前的最短步數? 從大到小枚舉,每次把最大的沒有關掉的燈關掉 暴力枚舉因數關就好 假設我
【BZOJ3992】序列統計(動態規劃,NTT)
swap int 乘法 true ble spa main 們的 oid 【BZOJ3992】序列統計(動態規劃,NTT) 題面 BZOJ 題解 最裸的暴力 設\(f[i][j]\)表示前\(i\)個數,積在膜意義下是\(j\)的方案數 轉移的話,每次枚舉一個數,直接丟進去
【BZOJ1415】【NOI2005】聰聰和可可(動態規劃,數學期望)
數學期望 class ios char for problem lin vector noi 【BZOJ1415】【NOI2005】聰聰和可可(動態規劃,數學期望) 題面 BZOJ 題解 先預處理出當可可在某個點,聰聰在某個點時 聰聰會往哪裏走 然後記憶化搜索一下就好了 #