揹包問題
時間限制:3000 ms | 內存限制:65535 KB
難度:3
-
描述
- 現在有很多物品(它們是可以分割的),我們知道它們每個物品的單位重量的價值v和重量w(1<=v,w<=10);如果給你一個揹包它能容納的重量爲m(10<=m<=20),你所要做的就是把物品裝到揹包裏,使揹包裏的物品的價值總和最大。
-
輸入
- 第一行輸入一個正整數n(1<=n<=5),表示有n組測試數據;
隨後有n測試數據,每組測試數據的第一行有兩個正整數s,m(1<=s<=10);s表示有s個物品。接下來的s行每行有兩個正整數v,w。 -
輸出
- 輸出每組測試數據中揹包內的物品的價值和,每次輸出佔一行。
-
樣例輸入
-
1
3 15
5 10
2 8
3 9
-
樣例輸出
-
65
-
-
代碼如下
-
# include <stdio.h>
# define max(a,b) a>b?a:b
int main()
{
int n,s,m,v,w,i,j,k;
scanf("%d", &n);
while (n--)
{
int sum[30] = {0};
scanf("%d%d", &s,&m);
for (i = 1; i<= s; i++)
{
scanf("%d%d",&v,&w);
for (k = 1; k <= w; k++)
for (j = m; j >= 1; j--)
sum[j] = max(sum[j],sum[j-1] + v);
}
printf("%d\n", sum[m]);
}
return 0;
}