061 改變DP物件的01揹包問題

2021-07-09 05:06:39 字數 632 閱讀 6082

經典的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...