这是一道很好的背包练手题。
细读题目,可以发现题目中并没有给定每捆干草的价值,只给出了每捆干草的重量。
再读题目,我们发现题目求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();
}