區間DP 石子合併一家人(C )

2022-05-10 02:31:43 字數 2836 閱讀 6855

入門版:一線

記憶體限制:128 mib    時間限制:1000 ms    標準輸入輸出

題目型別:傳統    評測方式:文字比較

題目描述

有n堆石子排成一排(n<=100),現要將石子有次序地合併成一堆,規定每次只能選相鄰的兩堆合併成一堆,並將新的一堆的石子數,記為改次合併的得分,編一程式,由檔案讀入堆數n及每堆石子數(<=200);

(1)選擇一種合併石子的方案,使得做n-1次合併,得分的總和最少

(2)選擇一種合併石子的方案,使得做n-1次合併,得分的總和最多

輸入格式

第一行為石子堆數n 第二行為每堆石子數,每兩個數之間用一空格分隔。

輸出格式

從第1行為得分最小第二行是得分最大。

樣例樣例輸入

44 5 9 4

樣例輸出

4454

首先,本文講的是dp石子合併,而非貪心合併果子二者的區別就在於此——每次只能選相鄰的兩堆合併成一堆還是任意合併。

思路設dpmin[i]--[j]表示

附上**

1 #include2 #include3 #include4

using

namespace

std;

5int n,dpmax[500][500],dpmin[500][500]/*

前i-j最優解

*/,sum[500][500],read[500

],tot;

6int

main()713

for(int i=1;i<=n;i++)

1421

}22 memset(dpmin,0x3f,sizeof

(dpmin));

23for(int i=1;i<=n;i++)

24 dpmin[i][i]=0

; 25

for(int len=1;len)

2635 dpmax[i][j]+=sum[i][j];

36 dpmin[i][j]+=sum[i][j]; 37}

38}39 cout<1][n]<

40 cout<1

][n];

41 }

高階版:拆分

題目描述

在乙個園形操場的四周擺放n堆石子,現要將石子有次序地合併成一堆.規定每次只能選相鄰的2堆合併成新的一堆,並將新的一堆的石子數,記為該次合併的得分。 試設計出1個演算法,計算出將n堆石子合併成1堆的最小得分和最大得分.

輸入格式

資料的第1行試正整數n,1≤n≤100,表示有n堆石子.第2行有n個數,分別表示每堆石子的個數.

輸出格式

輸出共2行,第1行為最小得分,第2行為最大得分

樣例樣例輸入

4

4 4 5 9

樣例輸出

1 #include2 #include3 #include4

using

namespace

std;

5int n,dpmax[1001][1001],dpmin[1001][1001],sum[1001][1001],read[1001],tot,maxi,mini=99999999;6

intmain()721

}22 memset(dpmin,0x3f,sizeof

(dpmin));

23for(int i=1;i<=2*n-1;i++)

24 dpmin[i][i]=0

; 25

for(int len=1;len)

2635 dpmax[i][j]+=sum[i][j];

36 dpmin[i][j]+=sum[i][j];37}

38}39for(int i=1;i<=n;i++)

4044 cout

45 }

優化版:數學支援

題目描述

在乙個園形操場的四周擺放n堆石子,現要將石子有次序地合併成一堆.規定每次只能選相鄰的2堆合併成新的一堆,並將新的一堆的石子數,記為該次合併的得分。

試設計出1個演算法,計算出將n堆石子合併成1堆最大得分.

輸入格式

資料的第1行試正整數n,1≤n≤2000,表示有n堆石子.第2行有n個數,分別表示每堆石子的個數.

輸出格式

輸出共1行,最大得分

樣例樣例輸入

4

4 4 5 9

樣例輸出

54

1 #include2 #include3 #include4

using

namespace

std;

5 unsigned int n,dpmax[4011][4011],sum[4011][4011],read[4011],tot,maxi,mini=99999999

,k;6

intmain()721

}22for(int len=1;len)

2330}31

for(int i=1;i<=n;i++)

32 maxi=max(maxi,dpmax[i][i+n-1

]);33 cout<

34 }

一家人 模擬)

時間限制 1 sec 記憶體限制 32 mb 提交 10 解決 7 提交 狀態 討論版 命題人 外部匯入 edit testdata 最近小明交了乙個新朋友叫小宇,他們在聊天的時候發現500年前他們竟然是一家人!現在小明想知道小宇是他的長輩,晚輩,還是兄弟。輸入包含多組測試資料。每組首先輸入乙個整數...

相親相愛一家人

眼看今年的高考就要來臨,在此我先祝願我的妹妹金榜題名,考入自己理想的大學。嘿嘿,還記得小時候妹妹是乙個 臭美 的人。總是喜歡化妝,然後穿漂亮的衣服。不過長大後則換做是我喜歡天天換衣服。自從上初中以後,妹妹就變了,變得不喜歡打扮自己,總是拼命的學習。花錢變得很節約。初中畢業我以還不錯的成績 至少我以為...

微軟一家人 在雲端執行的ServiceBus

teched2008大會已過去了快乙個月了,在大會上所看到的關於 azure的介紹至今還在頭腦中 不時出現。當然我本人不是什麼雲計算的狂熱支持者,到如今我的觀點也與蔡學鏞先生的差不多,就是關注加觀望 以免在雲端一腳踏空摔下來 另外就是我對雲的興趣目前也僅限在sds和 netservicebus這兩方...