UVA 1331 區間DP 三角剖分

2021-08-05 22:52:00 字數 955 閱讀 9923

題目文件

題目大意:按照順時針或者逆時針的順序給出多邊的點,要將這個多邊形分解成n-2個三角形,要求使得這些三角行中面積最大的三角形面積盡量小,求最小值。

分析:設dp[i][j]為i,i+1,i+2,....j-1這個多邊形的最大三角形面積的最小值,則很容易得出dp[i][j]=min(dp[i][j],max(s(i,j,k),dp[i][k],dp[k][j]));(i

(假設多邊形為凸多邊形)。但是實際多邊形不一定是凸多變形,這個時候就對每個三角形加以判斷,對這個三角形,如果沒有其它點在它內部,就是多邊形內部的三角形。

祥見**

#include#include#include#include#includeusing namespace std;

const double inf=1e30;

const double eps=1e-6;

struct edge

a[55];

int n;

double dp[55][55];

double s(edge a,edge b,edge c)

bool judge(int aa,int b,int c)

{ for(int i=1;i<=n;i++)

{if(aa==i||b==i||c==i)continue;

double s=s(a[i],a[aa],a[b])+s(a[i],a[b],a[c])+s(a[i],a[aa],a[c]);

if((s-s(a[aa],a[b],a[c]))

UVA 1331 三角剖分

題意 按照順時針或者逆時針的順序給出多邊的點,要將這個多邊形分解成n 2個三角形,要求使得這些三角行中面積最大的三角形面積盡量小,求最小值。分析 對於對角線不在多邊形內的點,其實不用考慮,只用判斷三角形內是否有其他點即可。includeusing namespace std define inf 0...

uva1331三角剖分

題意 輸入乙個簡單m 2 分析 每條對角線都是無序的,因此,給節點編號,從1到n 1,順時針方向,這樣多邊形的頂點都是有序的了,這樣就可劃分區間,類似區間dp來做。includeusing namespace std const int maxn 55 const double inf 0x3f3f...

UVa 1331 最大面積最小的三角剖分 dp

一共有4條邊,我們可以以隨意的順序切割,不過如果這樣的話,就會出現類似v0v3v4v6這樣的多邊形,這樣的多邊形很難用簡潔的狀態表示出來,這就是讓我一開始很糾結的地方。其實我們會發現,對於同一種切割方法,我們可以有多種切割順序,但我們只要計算一種就好了,不如把決策順序規範化。例如還是上面第一張圖,我...