[BZOJ4580][Usaco2016 Open]248(dp)

來源:互聯網
上載者:User
題目描述

傳送門 題解

設f(i,j)表示ij這一段區間合并成一個的最大值。不能合并成一個的都為-inf.
然後就可以dp了。。。
答案為max{f(i,j)},1<=i,j<=n.
可以發現這樣做雖然有一些區間不合法,但是每一個可能的情況都會枚舉到。 代碼

#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 305int n,inf,ans;int a[N],f[N][N];int main(){    scanf("%d",&n);    memset(f,128,sizeof(f));inf=f[0][0];    for (int i=1;i<=n;++i) scanf("%d",&a[i]),f[i][i]=a[i];    for (int len=2;len<=n;++len)        for (int l=1;l<=n-len+1;++l)        {            int r=l+len-1;            for (int k=l;k<r;++k)                if (f[l][k]!=inf&&f[k+1][r]!=inf)                    if (f[l][k]==f[k+1][r])                        f[l][r]=f[l][k]+1;        }    for (int i=1;i<=n;++i)        for (int j=i;j<=n;++j)            ans=max(ans,f[i][j]);    printf("%d\n",ans);}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.