經典的01揹包問題有時候遇到允許重量過大時會遇到問題。以重量為物件來進行dp會導致執行時間過長。
解決方案是更換dp的物件,當總價值較小時可以以此為物件進行dp,具體如下:
dp[i+1][j]=min(dp[i][j],dp[i][j-v(i)]+w(i))
即尋找價值一定時的重量的最小值。
此處需要注意的問題是初始化:
1. 為了使dp順利進行,在總價值無法滿足正好為j時,不存在合理的解,dp[0][j]=inf;
2.當0個物體都不用,價值為0時, 自然最小重量為0. dp[0][0]=0.
題源來自《挑戰程式競賽》第二版 61頁。
//
// 061_dp value.cpp
// changlle
//// created by user on 12/28/15.
//#include #include using namespace std;
int n=4;
int w[4]=;
int v[4]=;
int w=5;
int main()
cout<}
cout
}
揹包dp之01揹包
現在我們有n個配件,他們有不同的價值.但是我們揹包的容量是有限的,因為我們只有乙個一級包,所以我們最多可以裝v重量的東西.但是為了能更好的吃到雞 不存在的 我們要攜帶更有價值的配件,請問我們最多能拿多少價值的配件來當快遞員呢?輸入的第一行是t,表示有一共要打t場比賽.每組資料由三行組成.第一行包含兩...
揹包dp之01揹包變形
一種雙核cpu的兩個核能夠同時的處理任務,現在有n個已知資料量的任務需要交給cpu處理,假設已知cpu的每個核1秒可以處理1kb,每個核同時只能處理一項任務。n個任務可以按照任意順序放入cpu進行處理,現在需要設計乙個方案讓cpu處理完這批任務所需的時間最少,求這個最小的時間。輸入描述 輸入包括兩行...
01揹包 DP入門
n個重量和價值分別為w,v的物品。找出總重量不超過w 的物品,求所有挑選方案中價值總和的最大值。n 4 w,v w 5 輸出 7 選0號,1號,3號 理解 n個物品 揹包容量w int w max n v max n weight,value 暴搜 o 2 n int rec int i,int j...