题意:有N(1 ≤ N ≤ 3,402) 件物品和一个容量为V的背包。第i件物品的重量是w[i](1 ≤ Wi ≤ 400),价值是d[i](1 ≤ Di ≤ 100)。求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量M(1 ≤ M ≤ 12,880),且价值总和最大。
AC代码:
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <map>
#include <algorithm>
using namespace std;
const int maxn=1e6+5;
int dp[maxn],w[maxn],v[maxn];
int main(){
int n,s;
cin>>n>>s;
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)cin>>w[i]>>v[i];
for(int i=1;i<=n;i++)
for(int j=s;j>=w[i];j--)
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
cout<<dp[s]<<endl;
}