#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,有不少...