请求撤下题解
查看原帖
请求撤下题解
249447
Shxt_Plus楼主2024/6/16 12:00

这篇题解思路显然错误,我自己打了个代码:

#include <bits/stdc++.h>
using namespace std;
int dp[55][55];
int m, sum, a[55], b[55];
int main()
{
    cin >> m;
    for (int i = 1; i <= m; i++)
        cin >> a[i];
    for (int i = 1; i <= m; i++)
    {
        cin >> b[i];
        dp[i][i] = b[i] * b[i];
    }
    for (int len = 2; len <= m; len++)
    {
        for (int i = 1; i + len - 1 <= m; i++)
        {
            int j = i + len - 1;
            for (int k = i; k < j; k++)
                dp[i][j] = max(dp[i][j], dp[i][k] + dp[k + 1][j]);
            for (int k = 1; k <= m; k++)
            {
                int ans = 0, sum = 0;
                for (int l = i; l <= j; l++)
                {
                    if (a[l] == k)
                        sum += b[l];
                    else
                        ans += b[l] * b[l];
                }
                dp[i][j] = max(dp[i][j], ans + sum * sum);
            }
        }
    }
    cout << dp[1][m];
    return 0;
}

交上去只有30pts

2024/6/16 12:00
加载中...