NYOJ 737 石子合併(一)(區間動規)

2021-06-29 01:13:45 字數 616 閱讀 8081

區間內列舉最後一次的位置, 所以說區間動規一般都是三層for迴圈, 前兩層用來控制區間長度, 最後一層用來列舉最後一次的位子, 還有需要注意的是區間用從小到大, 因為動態規劃就是後面的用到前面的出的結果遞推後面的結果。 

再說一下這道題,

#include#include#includeusing namespace std;

const int maxn = 200 + 10;

const int inf = 0x3f3f3f3f;

struct kk

;int main()

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

scanf("%d", &dp[i][i].w);

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

for(int i = j - 1; i > 0; i--)

for(int k = i; k+1 <= j; k++)

}printf("%d\n", dp[1][n].d);

}return 0;

}

還有一點需要注意, 他的最後結果是用的總代價, 所以dp的結果要來自當前這次的代價和當前這次以前的總代價。

nyoj 737 石子合併(一) 區間動規

描述 有n堆石子排成一排,每堆石子有一定的數量。現要將n堆石子並成為一堆。合併的過程只能每次將相鄰的兩堆石子堆成一堆,每次合併花費的代價為這兩堆石子的和,經過n 1次合併後成為一堆。求出總的代價最小值。輸入 有多組測試資料,輸入到檔案結束。每組測試資料第一行有乙個整數n,表示有n堆石子。接下來的一行...

nyoj 737 石子合併(一) 區間dp

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 有n堆石子排成一排,每堆石子有一定的數量。現要將n堆石子並成為一堆。合併的過程只能每次將相鄰的兩堆石子堆成一堆,每次合併花費的代價為這兩堆石子的和,經過n 1次合併後成為一堆。求出總的代價最小值。輸入 有多組測試資料,輸入到檔案...

nyoj 737 石子合併(一) 區間dp

區間dp,因為只能相鄰的相加,所以牽扯到區間dp,即若要求乙個大的區間的最優解,先求小區間的最優解然後小區間慢慢的推出大區間的最優解。石子合併 一 時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 有n堆石子排成一排,每堆石子有一定的數量。現要將n堆石子並成為一堆。合併的過程只...