0
点赞
收藏
分享

微信扫一扫

P3146 [USACO16OPEN] 248 G (区间dp

纽二 2023-07-04 阅读 39
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
typedef pair<double,double> PDD;
const int mod = 1e8;
using ull = unsigned long long;
int n;
int a[300010];
int dp[2500][2500];
int res = 0 ;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        dp[i][i] = a[i];
        res = max(res,a[i]);
    }
    for(int len=1;len<=n;len++){
        for(int i=1;i<=n-1;i++){
            int j = i + len -1;
            for(int k=i;k<j;k++){
                if(dp[i][k] == dp[k+1][j] && dp[i][k] > 0){
                    dp[i][j] = max(dp[i][j] , dp[i][k] + 1);
                    res = max(res,dp[i][j]);
                }
            }
        }
    }
// 1 2 3 4 1 2 3 4
    cout<<res;
}

枚举区间的长度,从小的区间逐渐转移到大的区间,感觉好像挺水的

//1 2 3 4 1 2 3 4 由于不存在可以转移的方案  所以最大值是再初始的数据里,读入的时候就对res进行维护

举报

相关推荐

0 条评论