Charm Bracelet POJ - 362(01背包模板)

题意:有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;	
}

猜你喜欢

转载自blog.csdn.net/Alanrookie/article/details/107468009