題目大意:給定乙個長度為n的序列,至多將序列分成m段,每段序列都有權值,權值為序列內任意兩個數兩兩相乘之和。m<=n<=1000. 令權值最小。
dp[i][j]=max,遍歷k.dp[i][j]表示將前j個分為i段,w[k+1][j]表示k+1到j為一段的權值。
設m[i,j]表示動態規劃的狀態量。
m[i,j]有類似如下的狀態轉移方程:
m[i,j]=opt(i≤k≤j)
如果對於任意的a≤b≤c≤d,有m[a,c]+m[b,d]≤m[a,d]+m[b,c],那麼m[i,j]滿足四邊形不等式。
對於這題:
轉移方程dp[i][j]=min(dp[i-1][k]+w[k+1][j])(i-10 滿足四邊形不等式優化的條件
則可以進行優化,至於優化過程因為還沒理解,照抄以下,注意for迴圈範圍即等於號,這樣求得的即是最小值
#include #include #include #include #include #include #include using namespace std;typedef long long ll;
const int n = 1000;
const int mod=1e9+7;
const double en=2.718281828459;
using namespace std;
#define inf (ll)1<<60
ll dp[1002][1002];
ll w[1002][1002];
ll s[1002][1002];
ll p[1002];
ll val[1002][1002];
int n,m;
int main()
for(i=2;i<=m+1;i++)}}
}if(n<=m+1) printf("0\n");
else printf("%lld\n",dp[m+1][n]);
}return 0;
}
四邊形不等式優化
先占個坑,準備學習一把運籌學,好像裡面很多最優化的內容都是和演算法設計相關聯的問題 下面內容 發現了一篇更好的部落格,粘上去,粘上去。簡介 給出乙個長度為l的木棍,以及n個切割點 要求切割成n 1段,每切一次花費都是原始的木棍長度 求最小花費 分析 實際上我們可以看做是n 1個物品 這和能量項鍊是一...
四邊形不等式優化
例 一條筆直的高速公路上有n個村莊,每個村莊都有乙個整數字置座標,不同村莊的座標不同,現在要在其中的 p 個村莊上建立郵局。請問如何安排郵局的位置可以使得每個村莊到其最近郵局的距離和最小,輸出這個最小值。輸入格式 第一行包含兩個整數n和p,分別表示村莊數量以及郵局數量。第二行包含n個整數,表示n個村...
四邊形不等式優化
在一些動態規劃中狀態轉移方程是這樣的 m i,j min left 顯而易見,這種方法的時間複雜度是 o n 如何去優化呢?四邊形不等式 通過四邊形不等式的優化,可以進一步限定 k 的範圍,從而可以將事件複雜度降為 o n 我們最終的目的是證明決策變數 k 的單調性 此優化方法由姚期智的夫人儲楓 f...