比赛 动态规划练习 评测结果 AAAAAAAAAA
题目名称 魅力手镯 最终得分 100
用户昵称 CSU_Turkey 运行时间 0.101 s
代码语言 C++ 内存使用 0.39 MiB
提交时间 2017-03-26 19:52:06
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
const int MAXN=3500,MAXNN=13000;
int max1=-10000000;
int n,w[MAXN],d[MAXN],m,f[MAXNN];
int main()
{
	freopen ("charm.in","r",stdin);
	freopen("charm.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=0;i<=m;i++)
	f[i]=0;
	for(int i=1;i<=n;i++)
	{
	scanf("%d%d",&w[i],&d[i]);
}
    
    for(int i=1;i<=n;i++)
	{
		for(int k=m;k>=w[i];k--)
		if(f[k-w[i]]+d[i]>f[k])f[k]=f[k-w[i]]+d[i];
	 } //正放会导致同一个物体被放多次 
	/*for(int i=1;i<=m;i++)
	{
		for(int k=1;k<=n;k++)
		{
			if(i>=w[k]){
			f[i]=max(f[i-w[k]]+d[k],f[i]);
			
			}
		}
	}错误的背包会导致同一个物体被放多次*/
	for(int i=1;i<=m;i++)//cout<<f[i]<<" ";
	if(max1<f[i])max1=f[i];
	cout<<max1;
	return 0;
}