旅行者
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 18 Accepted Submission(s) : 6
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
一個旅行者有一個最多能用m公斤的揹包,現在有n件物品,它們的重量分別是W1,W2,...,Wn,它們的價值分別爲C1,C2,...,Cn.若每種物品只有一件求旅行者能獲得最大總價值。
Input
輸入的第一行爲T,表示測試數據的組數。對於每組測試數據的第一行:兩個整數,M(揹包容量,M<=200)和N(物品數量,N<=30),第2..N+1行:每行二個整數Wi,Ci,表示每個物品的重量和價值。
Output
對於每組測試數據輸出僅一行,一個數,表示最大總價值。
Sample Input
Sample Output
12
思路分析:這簡單的揹包問題,用一個數組來記錄體積,另一個數組來記錄價值,第三個數組來記錄最大的價值;
代碼:#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
int c[250],w[255],f[255];//w爲體積,c爲價值
int m,n,i,t,j;
scanf("%d",&t);
while(t--)
{
memset(f,0,sizeof(f));
scanf("%d%d",&m,&n);
for(i=1; i<=n; i++)
scanf("%d%d",&c[i],&w[i]);
for(i=1; i<=n; i--)
{
for(j=m; j>=c[i]; j--)
{
f[j]=max (f[j],f[j-c[i]]+w[i]);
}
}
printf("%d\n",f[m]);
}
return 0;
}