社区讨论
为啥记忆化搜索最后一个点过不去
P1616疯狂的采药参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @m6ek02y0
- 此快照首次捕获于
- 2025/01/27 12:33 去年
- 此快照最后确认于
- 2025/11/04 10:15 4 个月前
CPP
#include <iostream>
#include <cstring>
using namespace std;
#define int long long
const int MAX_T = 1e7 + 5;
int memo[MAX_T];
int cost[10005], val[10005];
int m;
int dfs(int time) {
if (time <= 0) return 0;
if (memo[time] != -1) return memo[time];
int max_val = 0;
for (int i = 0; i < m; ++i) { // 遍历所有草药
if (cost[i] <= time) {
max_val = max(max_val, val[i] + dfs(time - cost[i]));
}
}
memo[time] = max_val; // 记录结果
return max_val;
}
signed main() {
int t;
cin >> t >> m;
for (int i = 0; i < m; ++i) {
cin >> cost[i] >> val[i];
}
memset(memo, -1, sizeof(memo));
cout << dfs(t) << endl;
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...