上次去超市掃蕩回來的東西用完了,staginner又得跑超市一趟,出發前他列了一張購物清單,打算去買k種不同的商品,每種買一件。到了超市,staginner發現每種商品有n個品牌,每個品牌此商品的**為vi,對staginner的作用值為wi,他會從這n個品牌裡面挑乙個品牌買。這時,staginner突然想起出門時只帶了m元錢,又懶得去取錢了,所以不一定能買完k種商品,只好盡可能地讓買的東西對自己的總作用值ans最大。
多組樣例。
第一行兩個整數k,m代表staginner想買的不同種類商品的數目和他帶的錢 (0 < k <= 30, 0 < m <= 2000)
以下輸入分為k個部分,代表k種商品。
每個部分第一行為乙個數字n,代表第k種商品的n個品牌,n不大於10。之後跟著n行,每行兩個數字,代表物品的**vi和作用值wi。其中 0 < vi < m。
輸出case #: 最大總作用值,每兩個樣例之間有乙個空行。
3 100350 600
20 700
30 800
230 500
40 600
160 200
2 500
2200 1000
260 1200
1280 300
case 1: 1400分組揹包問題。case 2: 1300
view code
#include #include#define k 30
#define n 10
#define m 2001
intk,m;
intcnt[k];
intw[k][n],v[k][n];
intd[m][k][n];
int dp(int money,int i,int
j)
if(i==0
)
if(j==0
)
if(money>=v[i][j] && dp(money-v[i][j],i-1,cnt[i-1]-1)+w[i][j]>dp(money,i,j-1
))
return d[money][i][j]=dp(money-v[i][j],i-1,cnt[i-1]-1)+w[i][j];
return d[money][i][j]=dp(money,i,j-1);}
intmain()
}memset(d,-1,sizeof
(d));
if(kase) puts(""
); printf(
"case %d: %d\n
",++kase,dp(m,k-1,cnt[k-1]-1
)); }
return0;
}
CSU 1086 超市購物 分組揹包問題
time limit 1 sec memory limit 128 mb submit 21 solved 10 submit status 上次去超市掃蕩回來的東西用完了,staginner又得跑超市一趟,出發前他列了一張購物清單,打算去買k種不同的商品,每種買一件。到了超市,staginner發...
動態規劃 01揹包 超市購物
這種比較特殊的01揹包 01揹包 01揹包 還是沒有做到過唉。這道題我們觀察資料,發現v iv i vi 的具體數字很小,但是揹包的花費卻很大,我們可以考慮用另外一張方式進行揹包 用價值作為狀態,用花費作為具體的dpdp dp值進行計算。求在體積限制為代價最大,等價於在相同的價值 積最小 即用最小的...
1086 揹包問題 V2(多重揹包)
有n種物品,每種物品的數量為c1,c2 cn。從中任選若干件放在容量為w的揹包裡,每種物品的體積為w1,w2 wn wi為整數 與之相對應的價值為p1,p2 pn pi為整數 求揹包能夠容納的最大價值。輸入第1行,2個整數,n和w中間用空格隔開。n為物品的種類,w為揹包的容量。1 n 100,1 w...