文章
6
粉丝
38
获赞
1
访问
2.6k
#include <iostream>
#include <vector>
#include <algorithm> // 用于 std::max
using namespace std;
int main(void) {
int T, M;
while (cin >> T >> M) {
vector<int> time(M), values(M);
for (int i = 0; i < M; i++) {
cin >> time[i] >> values[i];
}
// 使用一个一维数组dp,长度为T+1
vector<int> dp(T + 1, 0);
// 遍历每一个草药
for (int i = 0; i < M; i++) {
// 从大到小遍历所有可能的时间,确保每个草药只被计算一次
for (int j = T; j >= time[i]; j--) {
dp[j] = max(dp[j], dp[j - time[i]] + values[i]);
}
}
// 最大值现在储存在dp[T]中
cout << dp[T] << endl;
}
return 0;
}
假设辰辰有 5 个单位的时间
T=5,山洞里有 3 株不同的草药
M=3。每株草药的采摘时间和价值分别如下:
第一株草药:采摘时间为 1 单位,价值为 3
第二株草药:采摘时间为 3 单位,价值为 4
第三株草药:采摘时间为 4 单位,价值为 5
我们需要找到在 5 个单位时间内可以采到的草药的最大总价值。
具体的输入格式如下:
5 3
1 3
3 4
4 5
让我们将这个例子带入代码中,逐步分析它的执行过...
登录后发布评论
暂无评论,来抢沙发