首先,來說以個問題;若該多邊形為凸多邊形的話,
那麼設 d(i,j)代表以i節點為起點以j為最後乙個點組成的多邊形的最大面積最小的剖分;
有狀態轉移式子 d(i,j) = min( d[i][j] , max( max(d(i,k),d(k,j) ),s(i,k,j) )) (其中i但對於不是凸多邊形的話,上述式子在對k決策時,要額外滿足乙個條件i-->k,k-->j 兩條線段必須都是多邊形的對角線;
判斷是否為對角線的話
點是否在多邊形內部;
#include#include#include#include#include#include#includeusing namespace std;
int n;
const int inf = 1e9;
const int maxn = 55;
const double eps = 1e-10;
struct point
}a[maxn];
double cross(point a,point b)
double dot(point a,point b)
point operator *(point a,double c)
point operator -(point a,point b)
int dcmp(double x)
double ********area(point a,point b,point c)
bool segmentproperintersection(point a1,point a2,point b1,point b2)
/*not include point in each side;*/
bool ispointonsegment(point p,point a1,point a2)
int ispointinpolygon(point p)
if(wn !=0) return 1;
return 0;
}bool judge(int i,int j)
point temp;
double fenmu = 50.0;
for(int k=1;k<=40;k++)
else
int ok = 1;
for(int g=0;g
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 三角剖分
題目文件 題目大意 按照順時針或者逆時針的順序給出多邊的點,要將這個多邊形分解成n 2個三角形,要求使得這些三角行中面積最大的三角形面積盡量小,求最小值。分析 設dp i j 為i,i 1,i 2,j 1這個多邊形的最大三角形面積的最小值,則很容易得出dp i j min dp i j max s ...