最大頂點數的凸多邊形

2021-08-15 19:22:26 字數 2262 閱讀 1640

原題:polygon

題意

在第一象限有n個點,用這些點再加上原點構成乙個凸多邊形(原點必須選),求頂點數的最大值。

思路

用dp[i][j]表示以i為最後第二個點,j為最後乙個點所能構成的最大頂點數。

對於所有的點,按照其斜率排序,以節省時間。然後規定第0個點和第n+1個點為原點,因為要從原點出發,再回到原點。

對於一次操作,假設定下前面兩點(1,2),對於後面的乙個點(3),判斷是否可以通過由這兩個點形成的向量逆時針旋轉180度得到(根據行列式知識,a*(d-f)+c*(f-b)+e*(b-d)>0時才成立(1點(a,b),2點(c,d),3點(e,f)))。如果可以說明1,2和2,3這兩條線是符合要求的,dp[2][3]就可以由dp[1][2]加一轉化。

最後在所有以原點為最後乙個點的情況中取乙個max即可。

**

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

//#include

#include

#define d long long

#define f double

#define max 0x7fffffff

#define min -0x7fffffff

#define mmm(a,b) memset(a,b,sizeof(a))

#define pb push_back

#define mk make_pair

#define fi first

#define se second

#define pill pair

#define pillf pair

#define for1(i,a,b) for(int i=a;i<=b;i++)

#define for2(i,a,b) for(int i=a;i>=b;i--)

#define ini(n) scanf("%d",&n)

#define inll(n) scanf("%lld",&n)

#define outisp(n) printf("%d ",n)

#define outllsp(n) printf("%lld ",n)

#define outiel(n) printf("%d\n",n)

#define outllel(n) printf("%lld\n",n)

using namespace std;

#define n 500100

#define mod ((int)1e9+7)

#define random(a,b) (rand()%(b-a+1)+a)

#define stop sleep(2000)

#define cls system("cls")

const

string el="\n";

const

string elel="\n\n";

const

string sp=" ";

const

string spsp=" ";

const

string tab="\t";

pill pos[107];

int dp[107][107];

bool cmp(pill a,pill b)

int jud(int x,int y,int z)

int main()

sort(pos+1,pos+1+n,cmp);

pos[0]=mk(0,0);

pos[n+1]=mk(0,0);

//for1(i,1,n)printf("%d %d\n",pos[i].first,pos[i].second);

mmm(dp,0);

for1(i,1,n)dp[0][i]=1;

for1(i,1,n)}}

for1(i,1,n)

cout<}

劃分凸多邊形

時間限制 800ms 記憶體限制 65535k 提交次數 0 通過次數 0 題型 程式設計題 語言 g gcc vc 問題描述 乙個正凸n邊形,可以用n 3條互不相交的對角線將正n邊形分成n 2個三角形。現在要求讀入n邊形的n n 20 輸出不同劃分方法的總數 要求解的是劃分方法數,而不需要輸出各種...

469 凸多邊形

題目描述 給定乙個按順序連線的多邊形的頂點,判斷該多邊形是否為凸多邊形。凸多邊形的定義 注 頂點個數至少為 3 個且不超過 10,000。座標範圍為 10,000 到 10,000。你可以假定給定的點形成的多邊形均為簡單多邊形 簡單多邊形的定義 換句話說,保證每個頂點處恰好是兩條邊的匯合點,並且這些...

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

驗證多邊形是否為凸多邊形 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...