沙子的質(zhì)量

設(shè)有N堆沙子排成一排,其編號(hào)為1,2,3,…,N(N< =300)。每堆沙子有一定的數(shù)量,可以用一個(gè)整數(shù)來描述,現(xiàn)在要將這N堆沙子合并成為一堆,每次只能合并相鄰的兩堆,合并的代價(jià)為這兩堆沙子的數(shù)量之和,合并后與這兩堆沙子相鄰的沙子將和新堆相鄰,合并時(shí)由于選擇的順序不同,合并的總代價(jià)也不相同,如有4堆沙子分別為 1 3 5 2 我們可以先合并1、2堆,代價(jià)為4,得到4 5 2 又合并 1,2堆,代價(jià)為9,得到9 2 ,再合并得到11,總代價(jià)為4+9+11=24,如果第二步是先合并2,3堆,則代價(jià)為7,得到4 7,最后一次合并代價(jià)為11,總代價(jià)為4+7+11=22;

問題是:找出一種合理的方法,使總的代價(jià)最小。輸出最小代價(jià)。

輸入格式:

第一行一個(gè)數(shù)N表示沙子的堆數(shù)N。 第二行N個(gè)數(shù),表示每堆沙子的質(zhì)量。 < =1000

輸出格式:

合并的最小代價(jià)

樣例輸入

4
1 3 5 2
樣例輸出

22

#include<iostream>
using namespace std;
int a[1005];
int sum[1005];
int dp[1005][1005];
int main()
{
    int n;
    cin>>n;
    sum[0]=0;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        sum[i+1]=sum[i]+a[i];
    }
    for(int l=2;l<=n;l++)
        for(int i=1;i<=n-l+1;i++)
        {
            int j=i+l-1;
            dp[i][j]=9999999;
            for(int k=i;k+1<=j;k++)
                dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1]);  //動(dòng)態(tài)規(guī)劃主要方程式
        }
    cout<<dp[1][n];
    return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • B樹的定義 一棵m階的B樹滿足下列條件: 樹中每個(gè)結(jié)點(diǎn)至多有m個(gè)孩子。 除根結(jié)點(diǎn)和葉子結(jié)點(diǎn)外,其它每個(gè)結(jié)點(diǎn)至少有m...
    文檔隨手記閱讀 13,661評(píng)論 0 25
  • 該文章總結(jié)自牛課網(wǎng)的在線算法課程(https://www.nowcoder.com/) 經(jīng)典排序算法就是前面講那幾...
    鍋與盆閱讀 7,839評(píng)論 6 14
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個(gè)記錄插入到已排序好...
    依依玖玥閱讀 1,347評(píng)論 0 2
  • 一日三餐 一日三餐…半 柴米油鹽白開水 柴米油鹽…和咖啡 忙忙碌碌見客戶 碌碌忙忙拉表格 見人講人話 見鬼見鬼話 ...
    愛栗斯閱讀 204評(píng)論 0 0
  • 9月9日凌晨11點(diǎn),躺在床上輾轉(zhuǎn)反側(cè)睡不著,不如計(jì)劃一下十月一和菠蘿(我最好的室友)出游路線吧。逛攜程看旅游門票,...
    蕓豆豆豆閱讀 409評(píng)論 0 2

友情鏈接更多精彩內(nèi)容