[DP]天天去旅行

题目描述
暑假到了,天天和妈妈一起背包去西藏玩(话说西藏最近不清静啊~),天天想带好多东西的,可是,包包的容量是有限的,她,必须得扔掉些东西。她收拾包已经头昏脑胀的了,所以求助于你,希望你能帮自己算算能最多带多少东西。
每个东西对于天天来说,有一个重要值,天天当然希望越重要的东西都带着咯,所以,你所需要做的,就是算出她能带东西的总最大重要值。

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值