今天看演算法導論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...