原題: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...