其實這一題還是沒有完全證明,因為趙爽的了**裡面是w(i , j) 一定要是相同的,而對於這一題,其實轉移方程和k的選擇不同而w不同,但是運用四邊形不等是因該也沒錯.
四邊形不等是的實質就是解的單調性...很多時候都可以這樣做.使用解的單調性或者是凸性來優化dp轉移.
#include #include #include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f
#define mem0(x , y) memset(x , y , sizeof(x))
#define ll long long
#define ll long long
#define rep(x , y) for(int x=0;x=0;x--)
#define lowbit(x) (x & (-x))
#define read(x) scanf("%d",&x)
#define readt(i) int i ; scanf("%d" , &i)
#define print(x) printf("%d\n" , x) ;
#define middle int mid = (l + r)/2
#define lson rt<<1 , l , mid
#define rson rt<<1|1 , mid+1, r
#define case int t ; int ca = 0 ; read(t) ; while(t--)
#define rt tree[rt]
#define fp freopen("1" , "r" , stdin)
#define mem0(x , y) memset(x , y , sizeof(x))
#define bin(x) ll bin ; bin = (ll)1 << x ; ///2的x次方
#define e edge[i]
#define lowbit(x) (x & (-x))
const int maxn = 500000 ;
const int maxv = 200000 ;
const int maxe = 200000 ;
const int mod = 1e8+7 ;
using namespace std ;
/****************前向星****************
struct edge
}edge[maxe] ;
int head[maxv] , hct = 0 ;
void add_edge(int s,int e,int w)
/*************************************/
struct node
}s[2000] ;
int sum[2000][2000] ;
int dp[2000][2000] ;
int main()
sort(s , s+n) ;
mem0(dp , inf) ;
for(int i=0;i= tmp)
}///printf("dp[%d][%d] = %d\n" , i, r , dp[i][r]) ;}}
printf("%d\n" ,dp[0][n-1]) ;
}}
四邊形不等式優化
先占個坑,準備學習一把運籌學,好像裡面很多最優化的內容都是和演算法設計相關聯的問題 下面內容 發現了一篇更好的部落格,粘上去,粘上去。簡介 給出乙個長度為l的木棍,以及n個切割點 要求切割成n 1段,每切一次花費都是原始的木棍長度 求最小花費 分析 實際上我們可以看做是n 1個物品 這和能量項鍊是一...
四邊形不等式優化
例 一條筆直的高速公路上有n個村莊,每個村莊都有乙個整數字置座標,不同村莊的座標不同,現在要在其中的 p 個村莊上建立郵局。請問如何安排郵局的位置可以使得每個村莊到其最近郵局的距離和最小,輸出這個最小值。輸入格式 第一行包含兩個整數n和p,分別表示村莊數量以及郵局數量。第二行包含n個整數,表示n個村...
四邊形不等式優化
在一些動態規劃中狀態轉移方程是這樣的 m i,j min left 顯而易見,這種方法的時間複雜度是 o n 如何去優化呢?四邊形不等式 通過四邊形不等式的優化,可以進一步限定 k 的範圍,從而可以將事件複雜度降為 o n 我們最終的目的是證明決策變數 k 的單調性 此優化方法由姚期智的夫人儲楓 f...