题目描述
暑假到了,天天和妈妈一起背包去西藏玩(话说西藏最近不清静啊~),天天想带好多东西的,可是,包包的容量是有限的,她,必须得扔掉些东西。她收拾包已经头昏脑胀的了,所以求助于你,希望你能帮自己算算能最多带多少东西。
每个东西对于天天来说,有一个重要值,天天当然希望越重要的东西都带着咯,所以,你所需要做的,就是算出她能带东西的总最大重要值。
Input
第1行为天天想带的东西的数量n(n≤100)和包包的最大容量V(V≤1000)
第2~n+1行,每行三个数m[i]、p[i],分别表示这个物品的大小、重要度
Output
一个数,表示天天所能带的东西的最大重要度
分析
和采药是一个模样,这不过变量改了,数组大了而已,自己去我的动态规划类别Ctrl+F搜索“采药”
#include <iostream>
#include <cstdio>
using namespace std;
int f[100001],v[1001],a[1001],t,m,i,j;
int main()
{
scanf("%d%d",&m,&t);
for (i=1;i<=m;i++)
scanf("%d%d",&v[i],&a[i]);
for (i=1;i<=m;i++)
for (j=t;j>=v[i];j--)
f[j]=max(f[j],f[j-v[i]]+a[i]);
printf("%d\n",f[t]);
return 0;
}