01 揹包 變形之轉移價值

2021-07-31 09:48:24 字數 820 閱讀 1772

今天看演算法導論dp。

這樣的一道題 敘述和01揹包一樣

有n個重量和價值分別為wi vi的物品。 從這些物品中挑選總重量不超過w的物品,求所有挑選方案中價值總和的最大值。

注意限制條件

1<=n<=100

1<=wi<=1e7

1<=vi<=100

1<=w<=1e9

如果還是按照之前的 用價值轉移的話

會發現這個演算法會t

因為那個的複雜度是 o(nw)

所以這次的

dp[i+1][j]

是前i個物品中價值為j時的最小重量值

不存在時就是乙個重量就是inf 初始化的時候用的 之後會提到

我在這裡用的2e9

其實只要比1e9大就行

還有就是初始化 dp[0][0]=0 dp[0][j]=inf

這並不是說 前0個物品挑選價值為j的 最小重量是inf 而是相當於用這個inf 代表這種情況不存在

可以想一想為什麼 dp[ 0][ 0] 為什麼不是inf

下面是我的** 大家可以看一看 不懂的可以互相交流 覺得寫得不好的也可以提一提意見哈~~

#include#include#includeusing namespace std;

const int maxn=100,maxv=100;

int maxw,n;

int dp[maxn+5][maxn*maxv+5];

int w[maxn],v[maxn];

const int inf=2000000000;

void init()

{ for(int j=0;j

揹包dp之01揹包變形

一種雙核cpu的兩個核能夠同時的處理任務,現在有n個已知資料量的任務需要交給cpu處理,假設已知cpu的每個核1秒可以處理1kb,每個核同時只能處理一項任務。n個任務可以按照任意順序放入cpu進行處理,現在需要設計乙個方案讓cpu處理完這批任務所需的時間最少,求這個最小的時間。輸入描述 輸入包括兩行...

01揹包變形

傳送門 現有n個物品,序號分別為1,2,n。對於每個i 1 i n 物品i有乙個體積wi和乙個價值vi。小明想在這n個物品中選取一些放到揹包裡帶回家。已知揹包的容積為w,這意味著所帶物品的總體積不能超過w。求出小明可以帶回家的物品總價值可能的最大值。constraints input 標準輸入格式如...

01揹包問題變形

一 問題 二 解題思路 三 c 下面是我自己理解寫的,沒有根據標準答案的,那答案在講啥?一直沒法ac,不過還是可以解決問題的。n件物品按單位重量價值降序排序,然後回溯法裝,右結點必要時剪枝,剛好湊成重量為m的若干件物品才能得到乙個解。include define max 50 using names...