请问记忆化搜索到底多算了什么
查看原帖
请问记忆化搜索到底多算了什么
928326
juruo_zhanshen楼主2025/6/21 22:08

rt

#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
typedef long long ll;
const int N = 100 + 5;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
int graph[N][N];
int n, m;
int dp[N][N];
bool check(int x, int y){
    if (x < 1 || x > n || y < 1 || y > m)
        return 0;
    return 1;
}
int dfs(int x, int y){
    if (x == 1 && y == 1){
        return graph[1][1];
    }
    if (dp[x][y])
        return dp[x][y];
    if (check(x - 1, y - 1))
        dp[x][y] = dfs(x - 1, y - 1);
    if (check(x, y - 1))
        dp[x][y] = max(dp[x][y], dfs(x , y - 1));
    if (check(x + 1, y - 1))
        dp[x][y] = max(dp[x][y], dfs(x + 1, y - 1));
    return dp[x][y] += graph[x][y];
}

int main ( int argc, char *argv[] )
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
                cin >> graph[i][j];
    for (int i = 2; i <= n; i++)
        for (int j = 1; j < i; j++)
            graph[i][j] = 0;
    int x = dfs(n, m);
    cout << x << endl;
    return 0;
}               /* ----------  end of function main  ---------- */
2025/6/21 22:08
加载中...