區間DP NOI1995 石子合併

2022-07-16 14:00:18 字數 723 閱讀 6730

給你\(n\)堆石子,現在要相鄰兩堆合成一堆,直到所有石子都在一堆裡面為止,然後 1 號位的石子可以和 \(n\) 號位的石子合併,也就是說,這些石子堆圍成了乙個環。

每次合併有乙個分數,這個分數就是新合併的石子堆的石子數,求最終的最小得分和最大得分

第一次寫區間dp,蠻好,區間dp相比於其他的dp至少有乙個固定的模板和思維方向,也就是常說的挺套路的,看了下題解就明白了了

轉移方程

\(f_ = f_ + f_ + d(i, j)\)

\(d\)為合併的分數

因為要滿足dp的無後效性且一定要由已知推未知,於是區間dp也有一些改動,詳細看**

//#define fre yes

#include #include #include const int n = 305;

int arr[n];

int f1[n][n], f2[n][n];

int s[n];

int main()

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

for (int p = 1; p < n; p++) }}

int minn = 1e9, maxx = 0;

for (int i = 1; i <= n; i++) printf("%d\n%d", minn, maxx);

}

NOI1995 石子合併

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

NOI 1995 石子合併

合併石子的加強版 不過這可是95年的noi的題,準確說應該是合併石子是它的削弱版吧。環的處理就是在鏈的後面再來一遍鏈,然後列舉一下起點終點,就和合併石子一樣了。include include include include include define inf 0x3f3f3f3f using na...

NOI1995 石子合併

本來以為是一道簡單的區間dp問題,草草地寫了個程式結果樣例都沒過,仔細一看,原來n堆石子擺成了環。區間dp是線性dp的一種,寫法比較固定,一般是先列舉區間長度,再列舉區間左端點,推出區間右端點,狀態轉移通常是列舉中間點。這道題雖然成了環,但本質是不變的,還是從2到n列舉區間長度,只不過區間左端點可以...