揹包問題

揹包問題

時間限制: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;
}
發佈了29 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章