區間內列舉最後一次的位置, 所以說區間動規一般都是三層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堆石子並成為一堆。合併的過程只...