程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> POJ 1160 (區間DP+四邊形優化)

POJ 1160 (區間DP+四邊形優化)

編輯:C++入門知識

POJ 1160 (區間DP+四邊形優化)


這個轉移方程不好想,尤其是一段值的解是中間,不明覺厲。dp[i][j] 用i個郵局,覆蓋前j個村莊的最小值。

還有就是區間dp的平行四邊形優化,這個題的轉移方程並不是“區間DP”,所以枚舉狀態要逆著(很花時間),且用一個郵局覆蓋都是從0斷開了相當於沒有斷開。

類比於石子歸並,矩陣鏈乘等標准區間DP,其所需狀態之前就已經獲得,不用倒推


#include 
#include 
#include 
using namespace std;

const int NN=310;
const int INF=0x7fffffff;

int n,m;
int s[NN],dp[NN][NN],w[NN][NN],p[NN][NN];

void get_w()//求在i~j號村莊間建一個郵局的最小距離和
{
    for (int i=1; i
//直線取石子問題的平行四邊形優化:

#include 
#include 
#include 

using namespace std;
const int INF = 1 << 30;
const int N = 1005;

int dp[N][N];
int p[N][N];
int sum[N];
int n;

int getMinval()
{
    for(int i=1; i<=n; i++)
    {
        dp[i][i] = 0;
        p[i][i] = i;//這個自己跟自己乘自然是以自己為分割了。
    }
    for(int len=1; len

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved