典型的动态规划中的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

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





