记忆化搜索求调
查看原帖
记忆化搜索求调
970949
CleverSea楼主2024/10/1 23:36

rt,本蒟蒻只拿了10分,求大佬帮调

#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 110;

int n, k;
int a[N][N], rec[N][N][N * N];

int dfs(int x, int y, int cnt)
{
    if (rec[x][y][cnt] != 0) return rec[x][y][cnt];
    if (x > n) return 0;
    int sum = 0;
    if (cnt < k)
    {
        for (int i = 1; i <= x + 1; i++)
        {
            if (dfs(x + 1, i, cnt + 1) + 3 * a[x][y] > sum)
            {
                sum = dfs(x + 1, i, cnt + 1) + 3 * a[x][y];
            }

            sum = max(sum, dfs(x + 1, i, cnt) + a[x][y]);
        }
    }
    else
    {
        for (int i = 1; i <= x + 1; i++)
        {
            sum = max(sum, dfs(x + 1, i, cnt) + a[x][y]);
        }
    }
    return rec[x][y][cnt] = sum;
}

signed main()
{
    cin >> n >> k;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= i; j++)
        {
            cin >> a[i][j];
        }
    }
    cout << dfs(1, 1, 0) << endl;
    return 0;
}

2024/10/1 23:36
加载中...