Hzoi 2018 2 11多邊形 區間DP

2022-03-27 03:32:55 字數 957 閱讀 2585

定乙個由n個頂點構成的多邊形,每個頂點被賦予乙個整數值,而每條邊則被賦予乙個符號:+(加法運算)或者*(乘法運算),所有邊依次用整數1到n標識。

乙個多邊形的圖形表示

首次移動,允許將某條邊刪除;

接下來的每次順序移

動包括下面步驟:

1、選出一條邊e,以及由e聯接的頂點v1和v2;

2、用乙個新的頂點,取代邊e及其所聯接的兩個頂點v1和v2。新頂點要賦予新的值,這個值是對v1和v2,做由e所指定的運算,所得到的結果。

所有邊都被刪除後,只剩下乙個頂點,遊戲結束。遊戲的得分就是該頂點的數值。

任務:編寫乙個程式,對於任意給定的多邊形,計算可能的最高得分,並且列舉出所有的可以導致最高得分的被首次移動的邊。

**注意:可以列舉刪掉的邊,

分別dp出最優方案輸出,容易出錯是狀態轉移方程:列舉分隔點k,

當p[k]==』*』時fmax[i,j]=max;

因為最小值可能是負數相乘為正可能更大。複雜度為o(n^4)。可以省掉一次列舉刪邊的過程,

將環拆成兩個鏈,然後dp到2*n,最後ans=max。

#include#include#includeusing namespace std;

int f[120][120],a[120],d[120][120];

char p[120][120];

int main()

p[n][1]=p[1][n]=p[1][0];

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

memset(d,0x3f,sizeof(d));

memset(f,128,sizeof(f));

for(int i=1;i<=2*n;i++)f[i][i]=d[i][i]=a[i];

for(int l=1;l<=n;l++)

for(int i=1;i<=2*n-l+1;i++)

求任意多邊形面積(凹多邊形和凸多邊形)

遇到問題 已知多邊形的各個左邊點,要求多邊形的面積 然後我搜尋了下看到這篇文章 這個人說的不多,但是簡單明瞭 首先已知各定點的座標分別為 x1,y1 x2,y2 x3,y3 xn,yn 則該多邊形的面積公式為 s 1 2 x1 y2 x2 y1 x2 y3 x3 y2 xk yk 1 xk 1 yk...

驗證多邊形是否為凸多邊形

驗證多邊形是否為凸多邊形 2108 shape of hdu include define debug 0 int crossmulti int x0,int y0,int x1,int y1,int x2,int y2 int main int n,i int f x,f y 第1個點 int s...

多邊形面積

點積 a b x1 x2 y1 y2 a b cos 點積的結果是乙個數值 叉積 a b x1 y2 x2 y1 a b sin 叉積的結果也是乙個向量,是垂直於向量a,b所形成的平面,如果看成三維座標的話是在 z 軸上,上面結果是它的模。三角形的面積 向量a和 向量b的叉積的絕對值表示 以 向量a...