主要是时间
2026-03-10 21:40:09
发布于:广东
2阅读
0回复
0点赞
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
long long t, m;
cin >> t >> m;
// 使用滚动数组优化空间复杂度
vector<long long> dp(t + 1, 0);
// 优化:预处理高价值/低时间的草药
vector<pair<long long, long long>> herbs;
for (long long i = 0; i < m; i++) {
long long time, value;
cin >> time >> value;
// 只保留有效草药(时间不超过总时间)
if (time <= t) {
herbs.push_back({time, value});
}
}
// 完全背包:正序遍历容量
for (auto& herb : herbs) {
long long time = herb.first;
long long value = herb.second;
for (long long j = time; j <= t; j++) {
dp[j] = max(dp[j], dp[j - time] + value);
}
}
cout << dp[t] << "\n";
return 0;
}
这里空空如也




有帮助,赞一个