1. 程式人生 > >經典問題四. 【區間dp】 凸多邊形最優三角形劃分

經典問題四. 【區間dp】 凸多邊形最優三角形劃分

(區間dp) 凸多邊形最優三角形劃分
問題描述:
這裡寫圖片描述

思路:
將凸多邊形的點陣列化。發現三角形劃分是滿足區間疊加的。
dp[i][j],1<=i<=j<=N,代表凸子多邊形{vi-1,vi,…,vj}的最優三角剖分所對應的權函式值,即其最優值。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int INF = 0x3f3f3f3f;

int dp[210][210]; //代表 區間i-1點到j點最優三角形剖分。
int a[210]; int n; int main() { while(~scanf("%d",&n)) { for(int i = 0; i < n; i++) scanf("%d",&a[i]); // dp[i][j] = dp[i][k]+dp[k+1][j]+a[k]*a[i-1]*a[l]; memset(dp,0,sizeof(dp)); for(int len = 1; len < n-1; len++) { for
(int i = 1; i+len < n; i++) { int r = i, l = i+len; dp[r][l] = INF; for(int k = r; k < l; k++) dp[r][l] = min(dp[r][l],dp[r][k]+dp[k+1][l]+a[k]*a[r-1]*a[l]); } } printf("%d\n",dp[1][n-1]); } return
0; } /* 5 121 122 123 245 231 */

相關推薦

經典問題. 區間dp 多邊形三角形劃分

(區間dp) 凸多邊形最優三角形劃分 問題描述: 思路: 將凸多邊形的點陣列化。發現三角形劃分是滿足區間疊加的。 dp[i][j],1<=i<=j<=N,代表凸子多邊形{v

動態規劃多邊形三角剖分

 經典dp問題  1、問題相關定義:  (1)凸多邊形的三角剖分:將凸多邊形分割成互不相交的三角形的弦的集合T。 (2)最優剖分:給定凸多邊形P,以及定義在由多邊形的邊和絃組成的三角形上的權函式w。要求確定該凸多邊形的三角剖分,使得該三角剖分中諸三角形上權之和為最小。

0014演算法筆記——動態規劃多邊形三角剖分

1、問題相關定義: (1)凸多邊形的三角剖分:將凸多邊形分割成互不相交的三角形的弦的集合T。 (2)最優剖分:給定凸多邊形P,以及定義在由多邊形的邊和絃組成的三角形上的權函式w。要求確定該凸多邊形的三角剖分,使得該三角剖分中諸三角形上權之和為最小。      凸多邊形三

經典問題二.區間dp石子歸併 51nod 1021

51nod 1021 石子歸併(區間dp) 問題描述: N堆石子擺成一條線。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的代價。計算將N堆

區間dp記憶化搜索UVALive - 3516 - Exploring Pyramids

main ram eof define mod 劃分 esp using 記憶 f(i,j)=sum(f(i+1,k-1)*f(k,j) | i+2<=k<=j,Si=Sk=Sj)。 f(i+1,k-1)是劃分出第一顆子樹,f(k,j)是劃分出剩下的子樹。 #

NOI2009 二叉查找樹 區間dp

pmod 解決 cst sum getc rep 必須 中序遍歷 結點 【NOI2009】二叉查找樹 【問題描述】   已知一棵特殊的二叉查找樹。根據定義,該二叉查找樹中每個結點的數據值都比它左子樹結點的數據值大,而比它右子樹結點的數據值小。另一方面,這棵查找樹中每個結

基礎練習區間DPcodevs1090 加分二叉樹題解

border style script 全部 靈魂 noip 初始 mar 出現 2003 NOIP TG 題目描寫敘述 Description 設一個n個節點的二叉樹tree的中序遍歷為(l,2,3,…,n),當中數字1,2,3,…,n為節點編

bzoj 1710: [Usaco2007 Open]Cheappal 廉價回文區間dp

枚舉 char cost print 對稱 return space amp clu 只要發現添加一個字符和刪除一個字符是等價的,就是挺裸的區間dp了 因為在當前位置加上一個字符x就相當於在他的對稱位置刪掉字符x,所以只要考慮刪除即可,刪除費用是添加和刪除取min 設f[i

bzoj 1742: [Usaco2005 nov]Grazing on the Run 邊跑邊吃草區間dp

sin can 開始 code \n 所有 class i++ scan 挺好的區間dp,狀態設計很好玩 一開始按套路設f[i][j],g[i][j]為吃完(i,j)區間站在i/j的最小腐敗值,後來發現這樣並不能保證最優 實際上是設f[i][j],g[i][j]為從i開始吃

bzoj 1068: [SCOI2007]壓縮區間dp

strlen class char s 合並 pre printf () d+ pri 神區間dp 設f[l][r][0]為在l到r中壓縮的第一個字符為M,並且區間內只有這一個M,f[l][r][0]為在l到r中壓縮的第一個字符為M,並且區間內有兩個及以上的M 然後顯然的轉

poj1179 Polygon區間DP

esc false 每次 負數 clas tro ios 結構 常用 Polygon Time Limit: 1000MS Memory Limit: 10000K Total Submissions:6633 Accepted: 2834 De

poj1191 棋盤分割區間DP記憶化搜索

print ron pri plm time ted hang def 空格 棋盤分割 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16263 Accepted: 5812

BZOJ4350: 括號序列再戰豬豬俠區間DP

Description 括號序列與豬豬俠又大戰了起來。 眾所周知,括號序列是一個只有(和)組成的序列,我們稱一個括號序列S合法,當且僅當: 1.( )是一個合法的括號序列。 2.若A是合法的括號序列,則(A)是合法的括號序列。 3.若A,B是合法的括號序列,則AB是合法的括號序列。 我們考慮mat

BZOJ 1742 [Usaco2005 nov]Grazing on the Run 邊跑邊吃草區間DP

這道題就當做複習區間DP的板子題吧QvQ f [ i

洛谷P1063能量項鍊區間DP

題目大意: 題目連結:https://www.luogu.org/problemnew/show/P1063 有 n n

HDU4632Palindrome subsequence區間DP

題目大意: 題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=4632 給出 t t

BZOJ2933 [Poi1999]地圖區間DP

Description 一個人口統計辦公室要繪製一張地圖。由於技術的原因只能使用少量的顏色。兩個有相同或相近人口的區域在地圖應用相同的顏色。例如一種顏色k,則A(k) 是相應的數,則有: 在用顏色k的區域中至少有一半的區域的人口不大於A(k) 在用顏色k的區域中至少有一半的區域的人口不小於A(k) 區域顏色

POJ-3280 Cheapest Palindrome 區間DP

題目傳送門 題目: 給定一個字串S及其長度M與S所含有的字元種數N(最多26種小寫字母),然後給定這N種字母Add與Delete的代價,求將S變為迴文串的最小代價和。 題解: 對字元的增加或刪除效果是一樣的,所以我們只需要考慮增加或刪除字元的最小代價,設dp[i][j]代表區間i

P1063-能量項鍊區間dp

正題 題目大意 有n個珠子組成環,每顆珠子的頭尾標記連線,將兩顆珠子合併會產生headi∗headj∗tailjheadi∗headj∗tailj的能量,產生一顆頭標記為頭珠子的頭標記,

BZOJ P1296 [SCOI2009]粉刷匠區間DP揹包DP

#include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #defin