合併石子 區間dp水題

2022-03-04 08:01:22 字數 809 閱讀 3632

合併石子 

描述: 有n堆石子排成一排,每堆石子有一定的數量。現要將n堆石子並成為一堆。合併的過程只能每次將相鄰的兩堆石子堆成一堆,每次合併花費的代價為這兩堆石子的和,經過n-1次合併後成為一堆。求出總的代價最小值。

tags:最基本的區間dp,這題範圍小,如果n大一些,還是要加個平行四邊行優化。

#include#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;#define rep(i,a,b) for(int i=a; i<=b; ++i)

#define inf 1e18

const

int n=1005

;int

n, a[n];

ll dp[n][n], f[n][n], sum[n][n], sum1[n];

intmain()

rep(i,

1,n) f[i][i]=i, dp[i][i]=0

; rep(len,

2, n)

for(int i=1; i+len-1

<=n; ++i)

}

}printf(

"%lld\n

", dp[1

][n]);

}return0;

}

合併石子(區間dp 模板題)

設有n堆沙子排成一排,其編號為1,2,3,n n 300 每堆沙子有一定的數量,可以用乙個整數來描述,現在要將這n堆沙子合併成為一堆,每次只能合併相鄰的兩堆,合併的代價為這兩堆沙子的數量之和,合併後與這兩堆沙子相鄰的沙子將和新堆相鄰,合併時由於選擇的順序不同,合併的總代價也不相同,如有4堆沙子分別為...

合併石子 (區間覆蓋DP)

任重而道遠 在乙個操場上一排地擺放著 堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的 堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。計算出將 堆石子合併成一堆的最小得分。第一行為乙個正整數n 2 100 以下 行,每行乙個正整數,小於10000,分別表示第i堆石子的個數 1...

計蒜客 合併石子 區間dp

題目鏈結 題解 leetcode裡面有個戳氣球的題和這個類似,用區間dp來解。由於n堆 n 2 石子合併,最終一定會有個只剩2堆石子的中間狀態,這個狀態就是突破口。最終的2堆石子一定是在原來的石子裡面連續的,可以用dp i j 表示區間i.j的石子合併後最小的體力消耗,n堆石子消耗的最小體力為dp ...