愛奇藝全國高校演算法大賽初賽C

來源:互聯網
上載者:User

標籤:i++   str   logs   枚舉   pre   name   div   space   string   

區間$dp$。

倒著考慮這件事件,肯定有最後一個取走的數字,假設是$a[k]$,那麼最後一次取走的價值肯定是$a[0]*a[k]*a[n+1]$,之前取走的價值和為$[1,k-1]$的價值加上$[k+1,n]$的價值。

設$dp[L][R]$表示取完區間$[L,R]$的最大價值,$dp[L][R] = a[L-1]*a[k]*a[R+1] + dp[L][k-1] + dp[k+1][R]$,枚舉$k$取最大值。

#include <cstdio>#include <cmath>#include <cstring>#include <algorithm>using namespace std;long long a[600];long long dp[600][600];int n;int main(){    scanf("%d",&n);    for(int i=1;i<=n;i++)    {        scanf("%lld",&a[i]);    }    a[0] = 1;    a[n+1] = 1;    for(int i=1;i<=n;i++)    {        for(int j=1;j<=n;j++)        {            int L = j;            int R = L+i-1;            if(R>n) continue;            for(int k = L;k<=R;k++)            {                dp[L][R] = max(dp[L][R],dp[L][k-1]+dp[k+1][R]+a[k]*a[L-1]*a[R+1]);            }        }    }    printf("%lld\n",dp[1][n]);    return 0;}

愛奇藝全國高校演算法大賽初賽C

聯繫我們

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