社区讨论

为啥记忆化搜索最后一个点过不去

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 条回复,欢迎继续交流。

正在加载回复...