有一排石子,共n 堆。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2 堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。試設計乙個演算法,計算出將n堆石子合併成一堆的最小得分。
首先由直接動態規劃的方法來做,即
for(int i=1;i<=n;i++)for(int j=i;j<=n;j++)
for(int k=i;k<=j;k++)
但是如果n的值超過了3000的話,這個演算法就明顯會**的,所以我們應當採取一定的優化,經過計算我們可以發現這個題目是滿足四邊形不等式的,這裡所用的優化呢是四邊形不等式優化。
我們定義階段為區間長度len,狀態為f[i][j]合併i到j的最小費用。
注意:因為我們的階段決定了,在計算s[i][j]時,s[i][j-1]和s[i+1][j]都已經計算出來了
//fzoj1555 合併石子(求最小值)四邊形不等式優化
#includeusing
namespace
std;
int f[101][101],s[101][101],a[101],sum[101
],q;
intmain()
for(i=1;i<=n;i++)
for(len=1;len)
for(i=1;i<=n-len;i++)}}
printf(
"%d\n
",f[1
][n]);
return0;
}
石子合併 四邊形不等式優化
藍橋杯 演算法提高 石子合併 很明顯的區間dp,d i,j 表示取第i堆到第j堆石子最少花費,轉移方程d i,j min d i,k d k 1,j sum j sum i 四邊形a b c d,有w b,c w a,d 滿足決策單調性 且w a,c w b,d w b,c w a,d 滿足四邊形不...
四邊形不等式優化石子合併
關於四邊形不等式或石子合併的資料。網上有很多。但有不少都是語焉不詳,直接拋給你幾個結論,讓人很難理解。這篇文章將以石子合併為例。證明關於四邊形不等式的一些結論。算是乙個溫習。題面 在乙個操場上擺放著一排n n 20 堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並...
四邊形不等式優化
先占個坑,準備學習一把運籌學,好像裡面很多最優化的內容都是和演算法設計相關聯的問題 下面內容 發現了一篇更好的部落格,粘上去,粘上去。簡介 給出乙個長度為l的木棍,以及n個切割點 要求切割成n 1段,每切一次花費都是原始的木棍長度 求最小花費 分析 實際上我們可以看做是n 1個物品 這和能量項鍊是一...