Luogu1040 加分二叉樹

來源:互聯網
上載者:User

標籤:include   roo   strong   space   cpp   int   turn   using   ios   

以前覺得難

想想以前還是naive

然而我還是用的記搜

令人害怕的題也沒那麼難,qwq

\(root(i,j)\)表示區間\([i,j]\)的根。

CODE:

#include<iostream>#include<cstdio>using namespace std;int n, a[31];int f[31][31], root[31][31];int dfs(int l, int r){    if(f[l][r]>0)return f[l][r];    if(r<l)return 1;    for(int i=l; i<=r; i++){        int p=dfs(l, i-1)*dfs(i+1, r)+f[i][i];        if(p>f[l][r]) f[l][r]=p, root[l][r]=i;    }    return f[l][r];}void print(int l, int r){    if(r<l)return;    if(l==r){        printf("%d ", l);return;    }    printf("%d ", root[l][r]);    print(l, root[l][r]-1);    print(root[l][r]+1, r);}int main(){    scanf("%d", &n);    for(int i=1; i<=n; i++)        scanf("%d", &f[i][i]);    printf("%d\n", dfs(1, n));    print(1, n);    return 0;} 

區間DP做法:

#include<iostream>#include<cstdio>using namespace std;int n,v[39],f[47][47],i,j,k,root[49][49];void print(int l,int r){    if(l>r)return;    if(l==r){printf("%d ",l);return;}    printf("%d ",root[l][r]);    print(l,root[l][r]-1);    print(root[l][r]+1,r);}int main() {    scanf("%d",&n);    for( i=1; i<=n; i++) scanf("%d",&v[i]);    for(i=1; i<=n; i++) {f[i][i]=v[i];f[i][i-1]=1;}    for(i=n; i>=1; i--)        for(j=i+1; j<=n; j++)            for(k=i; k<=j; k++) {                if(f[i][j]<(f[i][k-1]*f[k+1][j]+f[k][k])) {                    f[i][j]=f[i][k-1]*f[k+1][j]+f[k][k];                    root[i][j]=k;                }            }    printf("%d\n",f[1][n]);    print(1,n);    return 0;}

Luogu1040 加分二叉樹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.