时间限制: 1 Sec 内存限制: 64 MB
提交: 402 解决: 664
Judge Mode:Std IO
File Name:
[提交][状态]
[题目描述]
一个旅行者有一个最多能装 M 公斤的背包,现在有 n 件物品,它们的重量分别是W_1,W_2,...,W_n,它们的价值分别为C_1,C_2,...,C_n,求旅行者能获得最大总价值。
输入
第一行:两个整数,N(物品数量n<=100)和M(背包容量,M<=10000);
第2..N+1行:每行二个整数W_i,C_i,表示每个物品的重量和价值。
输出
仅一行,一个数,表示最大总价值。
样例输入
4 10 2 1 3 3 4 5 7 9
样例输出
12
#include<cstdio>
#define mmax(a,b) ((a>b)?a:b)
using namespace std;
int n, m, v, p, s[10001];
int main(){
scanf("%d%d",&n,&m);
for(int i = 1;i <= n;i++)
{
scanf("%d%d",&v,&p);
for(int j = m;j >= v;j--)
{
s[j] = mmax(s[j],s[j-v]+p);
}
}
printf("%d",s[m]);
}