首页 > 其他分享 >248G

248G

时间:2022-08-28 14:56:07浏览次数:85  
标签:int MAX 更新 区间 248G dp define

P3146 [USACO16OPEN]248 G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

  • 这题的dp是i到j全部合并的最大结果,所以dp[1][n]并不是最终结果
  • n^3区间递归,在子区间左边和右边相等时可以更新dp值,但要注意不能是0,(如果是0代表这两个小区间之前更本就没有更新过,也就是无法合并,那么这时候再更新就会把大区间更新 成1,出现错误
  • 因为并不一定是全部合并完了,所以答案不是dp[1][n],需要在每次更新的时候记录最大值
// https://www.luogu.com.cn/problem/P3146
#include <bits/stdc++.h>
using namespace std;
#define N 1e5
#define INF 2e9
#define MAX 1000

int n;
int dp[MAX][MAX], ans;
int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> dp[i][i];
    for (int step = 2; step <= n; step++)
        for (int l = 1, r = l + step - 1; r <= n; l++, r++)
            for (int k = l; k < r; k++)
                if (dp[l][k] && dp[l][k] == dp[k + 1][r])
                    dp[l][r] = max(dp[l][r], dp[l][k] + 1), ans = max(ans, dp[l][r]);
    printf("%d", ans);
}

 

标签:int,MAX,更新,区间,248G,dp,define
From: https://www.cnblogs.com/Wang-Xianyi/p/16632762.html

相关文章