本文主要是介绍【采药.】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
采药
题目链接
题意
在这规定时间内采摘草药,使得获得的草药总价值最大(动态规划)
思路
- 初始化数组并输入
- 动态规划
- 输出
坑点
- 容易忘记初始化
算法一:动态规划
时间复杂度
O(n * T)
实现步骤
- 输入
- 动态规划
- 输出
代码
#include <iostream>
using namespace std;
int a[10010],b[10010],f[10010];
//每株草药的采摘时间、价值以及最优解数组
int main()
{int t,n; //总时间和草药的数目 cin>>t>>n;for(int i=1; i<=n; i++){cin>>a[i]>>b[i];}//读取每株草药的采摘时间 a[i] 和价值 b[i],并存储在数组 a 和 b 中for(int i=1; i<=n; i++){for{(int j=t; j>=a[i]; j--)f[j]=max(f[j-a[i]]+b[i],f[j]);}}//两个嵌套循环实现动态规划。外层循环遍历每株草药,内层循环遍历每个时间点:从总时间 t 递减到当前草药的采摘时间 a[i]。对于每个时间点 j,代码计算如果不采摘当前草药和采摘当前草药的两种情况下的最大价值,并更新数组 f 中的相应值。cout<<f[t]; //输出结果
}
总结
动态规划问题,初始化一个数组来存储每个时间点的最大价值,并遍历所有草药和时间点来更新这个数组,最后输出总时间内的最大价值。
这篇关于【采药.】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!