题目大意:
有一个容量为M的背包和N(1 ≤ N ≤ 3,402) 件物品;对于第i件物品的重量是Wi (1 ≤ Wi ≤ 400),而且它的价值是Di (1 ≤ Di ≤ 100)。现在将这N件中的其中几件物品装入背包使装入物品的总重量不超过背包容量M (1 ≤ M ≤ 12,880),同时使这些物品总价值最大,最后输出这个价值。
AC:
#include<iostream>
#include<algorithm>
#include<memory.h>
using namespace std;
const int N = 1234567;
int w[N], d[N], f[N];
int main()
{
int n,m;
cin >> n >> m;
for(int i=1;i<=n;i++)
cin >> w[i] >> d[i];
memset(f,0,sizeof(f));
for(int j=1;j<=n;j++)
{
for(int i=m;i>=0;i--)
{
if(i>=w[j])
f[i]=max(f[i],f[i-w[j]]+d[j]);
}
}
cout << f[m] << endl;
return 0;
}