scau 9209 石子合併問題

2021-09-06 08:20:58 字數 878 閱讀 4155

dp經典問題,石子合併

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

/*

石子合併問題

由於石子是未成一圈,所以首先我們要把圓圈剪斷變成一條直線,而這樣的直線有n條(每個石子都可以作為直線的開頭)

接下來我們就考慮直線的石子合併問題,這個其實就是矩陣鏈乘法

dp[i][j]=min cost為本次合併帶來的代價,cost=ai+ai+1+ai+2……aj

*/#include

#include

#define n 110

#define inf 0x3f3f3f3f

#define max(a,b) a>b?a:b

#define min(a,b) aint dp[n][n][2]; //

[0]最小值,[1]最大值

intn,a[n],max,min;

int cost(int i ,int

j)void

solve()

}min=min(min,dp[1][n][0

]); max=max(max,dp[1][n][1

]);}

intmain()

printf(

"%d\n%d\n

",min,max);

}return0;

}

scau 9209 石子合併問題

dp經典問題,石子合併 描述 在乙個圓形操場的四周擺放著n 堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2 堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。試設計乙個演算法,計算出將n堆石子合併成一堆的最小得分和最大得分。石子合併問題 由於石子是未成一圈,所以首先我們要把圓...

3 3 石子合併問題

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

282 石子合併

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