T1270 例9 14 混合揹包

2021-09-18 05:06:35 字數 1188 閱讀 9310

【題目描述】

乙個旅行者有乙個最多能裝v公斤的揹包,現在有n件物品,它們的重量分別是w1,w2,…,wnw1,w2,…,wn,它們的價值分別為c1,c2,…,cnc1,c2,…,cn。有的物品只可以取一次(01揹包),有的物品可以取無限次(完全揹包),有的物品可以取的次數有乙個上限(多重揹包)。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。

【輸入】

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

第2…n+1行:每行三個整數wi,ci,piwi,ci,pi,前兩個整數分別表示每個物品的重量,價值,第三個整數若為0,則說明此物品可以購買無數件,若為其他數字,則為此物品可購買的最多件數(pipi)。

【輸出】

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

【輸入樣例】

10 3

2 1 0

3 3 1

4 5 4

【輸出樣例】

11

混合揹包的應用,1代表0-1揹包,0代表完全揹包,其他代表多重揹包

#include

#include

#include

#include

using namespace std;

int m,n,i,j,k;

int w[50]

,c[50

],p[50]

,dp[

205]

;void

zeroonepack

(int weight,

int value)

void

comoletepack

(int weight,

int value)

void

multipack

(int weight,

int value,

int number)}}

intmain()

for(i=

1;i<=n;i++

)printf

("%d\n"

,dp[m]);

return0;

}

T1317 例5 2 組合的輸出

排列與組合是常用的數學方法,其中組合就是從n個元素中抽出r個元素 不分順序且r n 我們可以簡單地將n個元素理解為自然數1,2,n,從中任取r個數。現要求你用遞迴的方法輸出所有組合。例如n 5,r 3,所有組合為 1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2...