文章

6

粉丝

38

获赞

1

访问

2.7k

头像
采药 题解:
P1086 北京大学机试题
发布于2024年6月5日 18:05
阅读数 420

#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
让我们将这个例子带入代码中,逐步分析它的执行过...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发