本文共 812 字,大约阅读时间需要 2 分钟。
为了解决这个问题,我们需要使用动态规划来解决一个典型的0-1背包问题。我们需要在给定的时间内选择草药,使其总价值最大化。
dp[j]
表示在时间j
内能够获得的最大价值。#includeusing namespace std;int main() { int T, M; // 读取输入 cin >> T >> M; // 一维数组初始化 int dp[T + 1] = {0}; for (int i = 0; i < M; ++i) { int a, b; cin >> a >> b; for (int j = T; j >= a; --j) { dp[j] = max(dp[j], dp[j - a] + b); } } cout << dp[T] << endl; return 0;}
T
和草药数量M
,然后逐行读取每株草药的采集时间和价值。dp
,初始化为0,表示不选择任何草药时的价值。j
,如果草药的采集时间小于等于j
,则更新dp[j]
为最大价值。这种方法确保了我们在给定的时间内选择了最优的草药组合,实现了动态规划的时间和空间优化。
转载地址:http://grdgz.baihongyu.com/