zjnu 1181 石子合併

2021-09-07 11:54:08 字數 893 閱讀 4273

這道題算是最簡單的區間dp了。。非常久之前寫的,搞懂原理了就1a。

傳送門:

狀態方程定義:

dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[i][j]);

然後利用三層for就好了。

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

} }

最重要的是這個迴圈,可是事實上也挺簡單,首先列舉區間長度,齊次列舉起點s,當然這裡每次都要對f[s][e]都初始化為正無窮(視題目情況而定),由於這裡每一次的s與e都是不同樣的。

然後第三層列舉的是k,k相當於跳板的作用,然後在裡面進行dp就好了。

#include#include#include#includeusing namespace std;

#define maxn 111

#define inf 99999999

int f[maxn][maxn],sum[maxn][maxn],spone[maxn];

int main()

} int min1=inf;

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

} }if(min1>f[1][n]) min1=f[1][n];

for(int i=1;if[s][k]+f[k+1][e]+sum[s][e])

f[s][e]=f[s][k]+f[k+1][e]+sum[s][e];}}

} if(min1>f[1][n]) min1=f[1][n];

swap(spone[i],spone[i+1]);

} printf("%d\n",min1);}/*

32 5 1

*/

282 石子合併

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

2298 石子合併

2008年省隊選拔賽山東 時間限制 1 s 空間限制 256000 kb 題目等級 gold 在乙個操場上擺放著一排n堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。試設計乙個演算法,計算出將n堆石子合併成一堆的最小得分。輸入描...

3 3 石子合併問題

問題描述 在乙個圓形操場的四周擺放著 n 堆石子。現要將石子有次序地合併成一堆。規定每次只 能選相鄰的 2 堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。試設計一 個演算法,計算出將 n 堆石子合併成一堆的最小得分和最大得分。程式設計任務 對於給定 n 堆石子,程式設計計算合併成一堆的...