Solution -「P2639」Bessie 的体重问题

cirnovsky /

这是一道很好的背包练手题。

细读题目,可以发现题目中并没有给定每捆干草的价值,只给出了每捆干草的重量。

再读题目,我们发现题目求Bessie不超过节食的限制的前提下可以吃掉多少干草,所以,我们可以把每堆干草的重量看作它的的价值,这就成了一个01背包的模板了

#include <cstdio>
#include <iostream>

using namespace std;

namespace solv
{
	const long long MAXN = 50000 + 5;
	long long F[MAXN], w[MAXN];
	long long n, m, c[MAXN];
	
	template<typename T>
	inline T getMax(T x, T y)
		{ return x > y ? x : y; }
	
	inline void Solve()
	{
		scanf("%lld%lld", &m, &n);
		for (long long i = 1; i <= n; ++i)
			scanf("%lld", &w[i]);
		for (long long i = 1; i <= n; ++i)
			for (long long j = m; j >= w[i]; --j)
				F[j] = solv::getMax(F[j], F[j - w[i]] + w[i]);
		
		printf("%lld\n", F[m]);
	}
}

signed main()
{
	solv::Solve();
}