http://tyvj.cn/p/1914
总钱数是背包容量,每个物品的价值就是重量,每个物品的价值*重要度是价值,然后按照01背包做。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main ()
{
const int maxn = 30000 + 5;
int n,m;
scanf("%d%d", &n,&m);
int f[maxn];
memset(f, 0, sizeof(f));
for (int i=1;i<=m;i++)
{
int v,p;
scanf("%d%d", &v,&p);
for (int j=n;j>=0;j--)
{
if (j>=v) f[j] = max(f[j], f[j-v]+v*p);
}
}
printf("%d\n", f[n]);
return 0;
}