51nod1021石子歸併(區間dp)

2021-07-11 07:26:12 字數 873 閱讀 9321

#include 

#include

#include

using

namespace

std;

int n;

int a[105],sum[105];

int dp[105][105];

const

int inf=0x3f3f3f3f;

void init()

int main()

for(int len=2;len<=n;len++)

//因為我len是從2開始的,所以下面有很多地方需要len-1,因為len雖然表示當前的長度,但是一加上i就多了一位,就需要-1,這裡len表示長度}}

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

}return

0;}

下面是未優化的方法,這個相對來說比較好理解,但是這塊陣列需要多開一倍,因為這裡沒有處理超出n的那部分,浪費了一些空間,不過資料小的時候還是沒有問題的

#include 

#include

#include

using

namespace

std;

int a[1005],sum[1005];

int dp[1005][1005];

int n;

const

int inf=0x3f3f3f3f;

void init()

int main()

for(int len=2; len<=n; len++)}}

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

}return

0;}

51nod 1021 石子歸併

n堆石子擺成一條線。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的代價。計算將n堆石子合併成一堆的最小代價。例如 1 2 3 4,有不少合併方法 1 2 3 4 3 3 4 3 6 4 9 10 19 1 2 3 4 1 5 4 5 1 9...

51nod 1021 石子歸併

1021 石子歸併 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 n堆石子擺成一條線。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的代價。計算將n堆石子合併成一堆的最小代價。例如 1 2 3 4,有不少...

51nod 1021 石子歸併

1021 石子歸併 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 n堆石子擺成一條線。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的代價。計算將n堆石子合併成一堆的最小代價。例如 1 2 3 4,有不少...