DP地獄訓練 石子合併

2022-03-25 21:52:53 字數 1054 閱讀 1082

時間限制: 1 sec  記憶體限制: 64 mb

提交: 1004  解決: 204

[提交][狀態][討論版]

有n堆石子圍成乙個圓圈。現在需要把它們合併成一堆石子。每次合併時,只能合併相鄰的兩堆石子,所耗力氣為兩堆石子重量之和,合併得到的新堆的重量為原兩堆重量之和。問最少需要耗費多少力氣?

資料規模:1<=n<=200,合併n堆石子最少需要耗費的力氣不超過2*10^9。

第一行乙個整數n,第二行n個整數,表示順序排列的每堆石子的重量。

只有一行,該行只有乙個整數,表示合併這n堆石子最少需要耗費的力氣。

3

1 3 5

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7

8using

namespace

std;910

#define inf 500000000000ll

1112

long

long n, a[700], f[700][700], ans =inf;

1314

intmain()

20 n *= 2;21

for(int i = 1 ; i <= n ; i ++)for(int j = 1 ; j <= n ; j ++)f[i][j] =inf;

22for(int i = 1 ; i <= n ; i ++)

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

33}34for(int i = 1 ; i <= n / 2 ; i ++)

35 ans = min(ans, f[i][i + n / 2 - 1

]);36 printf("

%lld\n

", ans);

37 }

view code

DP地獄訓練 石子歸併

時間限制 1 sec 記憶體限制 64 mb 提交 694 解決 295 提交 狀態 討論版 有一堆石頭質量分別為w1,w2,wn.wi 10000 將石頭合併為兩堆,使兩堆質量的差最小。輸入第一行只有乙個整數n 1 n 50 表示有n堆石子。接下去的n行,為每堆石子質量。輸出只有一行,該行只有乙個...

DP 合併石子

矩陣連乘求最小相乘次數的問題和石子合併的問題思路是一樣的,而二者都是典型的dp 石子合併的問題 問題描述 在一條直線上有n堆石子,每堆有一定的數量,每次可以將兩堆相鄰的石子合併,合併後放在兩堆的中間位置,合併的費用為兩堆石子的總數。求把所有石子合併成一堆的最小花費。輸入格式 輸入第一行包含乙個整數n...

dp 合併石子

靈活的dp啊。靈活的思路啊。怎樣去分析乙個你認為是用簡單dp解決的問題呢。就是把問題盡量想得簡單一點。舉個例子,把大象放進冰箱分為幾步 把大象的頭放進冰箱,把大象的尾巴放進冰箱。都是同樣的 放進冰箱 的操作,涉及的資料的規模變小了,這樣 步驟簡化 就可以有點思路。回到說這道題 你合併這11堆石子,你...