簡單的一道題 揹包問題

2021-08-21 18:57:57 字數 948 閱讀 6648

時間限制: 1 sec  記憶體限制: 128 mb

麻煩的渣渣輝又要和女朋友去旅遊啦。

他們有乙個最多能用v公斤的揹包,現在有n件物品,它們的重量分別是w1,w2,...wn,它們的價值分別為c1c2...cn。

有的物品只可以取一次(01揹包),有的物品可以取無限次(完全揹包),有的物品可以取的次數有乙個上限(多重揹包)。

求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。

第一行:二個整數,v(揹包容量,v<=200),n(物品數量,n<=30);

第2..n+1行:每行三個整數wicipi,前兩個整數分別表示每個物品的重量,價值,第三個整數若為0,

則說明此物品可以購買無數件,若為其他數字,則為此物品可購買的最多件數(pi)。

僅一行,乙個數,表示最大總價值。

10 3

2 1 0

3 3 1

4 5 4

11
#include#includeusing namespace std;

const int maxn = 1005;

int dp[maxn][maxn];

int c[maxn];//重量

int w[maxn];//價值

bool x[maxn];//若為1,則說明此物品可以購買無數件

int main()

else//while

}//else

}//for

p--;

//初始化

for(int i = 0;i < n; i++)

for(int i = 1;i <= p; i++)else//else

}//容量

}//物品

printf("%d\n",dp[p][v]);

} return 0;

}

DP 分糖果 一道揹包題

你的揹包 傳送門 狀態 f i j k 前i個糖果選j個糖果且差值為k的最大和 有點類似雙塔,不過這次兩塔有獨立性。差值可正可負,我們設定正為f i r i 負為f i 動歸方程就是揹包的方程 不選f i j k f i 1 j k 選 f i j k f i 1 j 1 k f i r i f i...

一道簡單的題

阿里巴巴的一道面試題 25.給定乙個整數陣列和乙個整數,返回兩個陣列的索引,這兩個索引指向的數字的加和等於指定的整數。需要最優的演算法,分析演算法的空間和時間複雜度。include include using namespace std struct stwoindex 初始化,同時等於0,說明不存...

一道簡單DP題

首先,一看就應該知道這是一道dp題。原因在於其當前結果都依賴於前面計算得到的子結果。區分分治和dp的關鍵條件就在於演算法執行中間階段的計算結果是否依賴於其子問題的結果,若依賴則為dp,否則為分治。dp題的關鍵在於找出狀態轉移方程和初始條件 或者稱為邊界值 找出狀態轉移方程的關鍵又在於找對乙個狀態函式...