题意: 输入的第一行有两个数,第一个是代表有n件物品,第二个表示背包的重量限制。接下来有n行数据,每行
数据包含两个数字。第一个表示这件物品的重量,第二个数字表示这件物品的价值。
#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cctype>
using namespace std;
const int N = 14000;
const int inf = 0x3f3f3f3f;
int main()
{
int w[N], v[N];
int i, j, n, m;
int dp[N];//表示选择到第i件物品时的最佳结果
while(~scanf("%d %d", &n, &m))
{
for(i=1;i<=n;i++)
scanf("%d %d", &w[i], &v[i]);
memset(dp, 0, sizeof(dp));
for(i=1;i<=n;i++)
{
for(j=m;j>=w[i];j--)
{
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
}
}
printf("%d\n", dp[m]);
}
return 0;
}