動態規劃之0-1揹包問題(POJ3624)
有N件物品和一個容積為M的揹包。第i件物品的體積w[i],價值是d[i]。求解將哪些物品裝入揹包可使價值總和最大。每種物品只有一件,可以選擇放或者不放。(N<=3500,M<=130000)。
解題思路:
用F[i][j]表示取前i種物品,使它們總體積不超過j的最優取法取得的價值總和。
遞推:
F[i][j]=max(F[i-1][j],F[i-1][j-w[i]]+d[i])
取或不取第i種物品,兩者選優(j-w[i]>=0才有第二項)
本題如用記憶型遞迴,需要一個很大的二維陣列,會超記憶體。注意到這個二維陣列的下一行的值,只用到了上一行的正上方及左邊的值,因此可以用滾動陣列的思想,只要一行即可。即可用一維陣列,用“人人為我”遞推型動歸實現。
注意遞推的時候從右向左求一維陣列的值。
相關推薦
動態規劃之0-1揹包問題(POJ3624)
有N件物品和一個容積為M的揹包。第i件物品的體積w[i],價值是d[i]。求解將哪些物品裝入揹包可使價值總和最大。每種物品只有一件,可以選擇放或者不放。(N<=3500,M<=130000)。 解題思路: 用F[i][j]表示取前i種物品,使它們總體積不超過j的最優取法取
動態規劃之0-1揹包問題
問題: 物品集合s={1,2,3,4,…,n},物品i的重量為wi,其價值為vi,揹包的容量(最大載重量)為W,如何裝使物品價值最大。(物品不能分割) 分析: p(i,j)是揹包容量為j,可選物品為i(i+1,…,n)時的最優解 (“將前i個物品放入容量為j的揹
動態規劃之0-1揹包問題,鋼條切割
動態規劃 首先說說動態規劃:動態規劃與分治法相似,都是組合子問題的解來解決原問題的解,與分治法的不同在於:分治法的子問題是相互獨立存在的,而動態規劃應用於子問題重疊的情況。 設計動態規劃演算法的步驟: 1、刻畫一個最優解的結構特徵 2、遞迴地定義最優解的
動態規劃問題——0/1揹包問題(Java實現)
1、問題描述0-1揹包問題: 給定N件物品和一個容量為V的揹包。放入第i件物品耗費的空間為C[i] ,得到的價值是 W[i] 。 問:哪些物品裝入揹包可使價值總和最大?最大是多少?2、基本思路2.1 基本思路 這是最基礎的揹包問題,特點是:每
動態規劃實現0-1揹包問題
//動態規劃實現0-1揹包 public class DN01 { public static void dy(int []v,int []w,int c,int [][]m){ int n=v.length-1; //i=n int jMax=Math.min(w[n]-1,
【演算法】動態規劃解決0-1揹包的兩個疑惑
1. 揹包問題 描述: 給定 n 種物品,每種物品有對應的重量weight和價值value,一個容量為 maxWeight 的揹包,問:應該如何選擇裝入揹包的物品,使得裝入揹包中的物品的總價值最大? 過程: a) 把揹包問題抽象化(X1,X2,…,Xn,其中 Xi
動態規劃解0-1揹包問題(C語言版)
這學期開的演算法課,感覺好難,光這個問題就弄了好久,我這裡的程式碼非本人原創程式碼,都是借鑑網上的程式碼按自己的理解加以改進的,原網頁地址 為http://www.cnblogs.com/qinyg/archive/2012/04/26/2471829.html 問題描
動態規劃解0-1揹包問題
題目如下: 試用動態規劃的方法,求解0-1揹包問題:有一揹包,能裝入物體總重量為C,有n個物體,重量為w1,w2,..,wn,價值分別為v1,v2,…vn。試求一種裝載方案,使得揹包裝載的物體總價值最大。其中,C, w都是整數。 解題思路: 簡單dp 試用動態規劃
動態規劃演算法0-1揹包問題java實現
問題描述:給定n種物品和一揹包,物品i的重量是wi,其價值是pi,揹包的容量是M,問如何選擇裝入揹包中的物品總價值最大? import java.util.ArrayList; import java.util.HashMap; /* * 實際就是一種分而治之的思想
回溯法之0-1揹包問題(C實現)
#include<stdio.h> int n,c,bestp;//物品的個數,揹包的容量,最大價值 int p[10000],w[10000],x[10000],bestx[10000]
nyoj 49-開心的小明(動態規劃, 0-1背包問題)
限定 std btn inpu 描述 背包 代碼 OS 出了 49-開心的小明 內存限制:64MB 時間限制:1000ms Special Judge: No
51Nod1085 0-1揹包(一維和二維陣列實現)
揹包是典型的動態規劃問題,關於揹包問題的詳解,推薦部落格:點選開啟連結(這篇部落格有點錯誤,程式碼for迴圈裡錯了,不過講解 的很詳細) 題目如下: 在N件物品取出若干件放在容量為W的揹包裡,每件物品的體積為W1,W2……Wn(Wi為整數),與之相對應的價值為P1,P2……Pn(Pi為整數)
0-1揹包 (反向、概率)HDOJ 2955
Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 31576 Accepted Submission(s
動態規劃法例子 0-1揹包問題
/* 動態規劃法例子 0-1揹包問題 */ //物品個數 const int n = 5; // 重量 int Weight[n] = {3,4,7,8,9}; // 價值 int Values[n] = {4,5,10,11,13}; // 揹包總
演算法導論 第十五章:動態規劃之棒的切割(Rod Cutting)
和分治法一樣,動態規劃(Dynamic programming)是通過組合子問題的解而解決整個問題的。 其不同點在於: 1)分治法是將問題劃分成一些獨立的子問題,遞迴求解各個子問題,然後合併子問題的解而得到原問題的解 2)動態規劃使用於子問題不獨立的情況,也就是各個
第四章作業-串-計算機17級 7-1 最長對稱子串 (25 分)四種方法求解(暴力列舉+動態規劃+中心擴充套件+manacher演算法(馬拉車))
7-1 最長對稱子串 (25 分) 對給定的字串,本題要求你輸出最長對稱子串的長度。例如,給定Is PAT&TAP symmetric?,最長對稱子串為s PAT&TAP s,於是你應該輸出11。 輸入格式: 輸入在一行中給出長度不超過1000的非空字串
使用動態規劃法解決0/1揹包問題
問題: 給定n種物品和一個揹包i(1<=i<=n)的重量是Wi,其價值為Vi,揹包的容量為C,對每種物品只能有兩種選擇:裝入或者不裝入揹包。如何選擇裝入揹包的物品使得裝入揹包中的物品的總價
9.29-貪心演算法(//活動安排//0-1揹包//裝載問題)
1.活動安排 描述:Jack是一名nwpu的大一新生,對學校舉辦的各種活動都十分的好奇,想盡可能多的參加這些活動。Npwu每天共有N項活動,其開始結束時間分別為B[i],E[i],(i = 1,2,……N) 請問Jack一天最多能參加幾項活動。當然,Jack在同一時間內只能
0-1揹包(回溯法剪枝版)
#include<stdio.h> #define n 3 int maxvalue=0,tot=0; int w[n]={16,15,15},v[n]={45,25,25},c=30; int tempweight=0,tempvalue=0; void df
動態規劃問題筆記1-揹包問題
最近刷題時碰到了動態規劃的問題,最開始覺得很難,無從下手,研究了一下動態規劃問題,覺得很神奇,做點兒筆記記錄下。 結合具體的問題來理解比單獨研究理論更形象一些。 問題: 要從物品重量為[2,3,5,5,10,2,8]的7個物體中選擇幾個物體放入容量為1