洛谷 P1048 [NOIP2005 普及组] 采药

这篇博客介绍了如何解决NOIP2005普及组的采药问题,该问题是一个典型的动态规划中的01背包问题。文章详细阐述了01背包问题的概念,给出了输入输出样例,并解析了状态转移方程,最后提供了相应的代码实现。

典型的动态规划中的01背包问题

何为01背包问题

01背包问题:每件物品是不可以被分割的,也就是说,这件物品要么装进背包内带走,要么不带走。0表示该物品没有被带走(没有被装进背包内),1表示带走该物品。


输入输出样例及说明

输入

70 3
71 100
69 1
1 2

输出

3
由于采每株草药的时间是不可以被分割的,只能选择采或不采。这里选择第二株草药和第三株草药带走。(花费时间)为69+1=70,未超过背包容量(总时间),价值是:1+2=3

状态转移方程

状态

f(i,j)表示前i株草药,在剩余时间为j时能获得的最大价值。

状态转移方程

状态转移方程

此处分两种情况:

①前i-1株草药在剩余时间为j时可以获得最大值,即不采第i株草药;
②前i-1株草药在剩余时间为j-w[i]时获得最大价值 + 第i株草药价值v[i],即采第i株草药

代码

#include<bits/stdc++.h>//万能头
using namespace std;
const 
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值