最大四边形

最大四边形

时间限制:1000 ms  |  内存限制:65535 KB

难度:2

描述
平面坐标上有n个点,你知道能组成四边形中面积最大的是多少吗?

输入
有多组测试数据

第一行整数n,表示有n个点,( 4<=n<=300 )

然后n行,每行x,y表示点的坐标。(没有重复的点)

输出
最大四边形的面积.(保留六位小数)
样例输入
5
0 0
0 4
4 0
4 4
2 3
样例输出
16.000000
上传者

TC_常红立

昨天百度搜了看了别人的代码。。我现在也不知道什么意思具体的思想。先写上,以后再想想~~

#include<iostream>
#include<stdio.h>
using namespace std;
struct point
{
	double x;
	double y;
};
double max(double a,double b)
{
	if(a>b)
		return a;
	else
		return b;
}
double area(point a0,point a1,point a2)
{
	return (a0.x*a1.y+a1.x*a2.y+a2.x*a0.y-a1.x*a0.y-a2.x*a1.y-a0.x*a2.y)/2;
}
int main()
{
   int n,i,j,k;
   point Point[300];
   while(cin>>n)
   {
	    double s,lmax,rmax,ans=0;
	   for(i=0;i<n;i++)
          cin>>Point[i].x>>Point[i].y;
	   for(i=0;i<n;i++)
	   {
		   for(j=i+1;j<n;j++)
           {    lmax=rmax=0;
		   for(k=0;k<n;k++)
		   {
			   if(i!=k &&j!=k)
               {
				   s=area(Point[i],Point[j],Point[k]);
				   if(s<1e-10)
					   lmax=max(lmax,-s);
				   else
					   rmax=max(rmax,s);
			   }
		   }
		   if(lmax==0 ||rmax==0)   continue;
		   ans=max(ans,(lmax+rmax));
		   }
	   }
	   printf("%.6lf\n",ans);
   }
	return 0;
}

时间: 2024-08-03 17:51:59

最大四边形的相关文章

四边形不等式优化

四边形不等式优化条件(转自这里) 在动态规划中,经常遇到形如下式的转台转移方程: m(i,j)=min{m(i,k-1),m(k,j)}+w(i,j)(i≤k≤j)(min也可以改为max) 上述的m(i,j)表示区间[i,j]上的某个最优值.w(i,j)表示在转移时需要额外付出的代价.该方程的时间复杂度为O(N^3). 下面我们通过四边形不等式来优化上述方程,首先介绍什么是"区间包含的单调性"和"四边形不等式" (1)区间包含的单调性:如果对于i≤i'<j≤

四边形不等式(石子合并)

动态规区间dp做这道题的话应该是n^3,下面的代码优化到了n^2,用四边形不等式优化. 设mid[i][j]是dp[i][j]的最优解的断点,即它左区间的右端点,那么mid[i][j-1]<=mid[i][j]<=mid[i+1][j],所以在求解dp[i][j]时,枚举k可以只枚举这两个值之间枚举就好, 程序要先枚举区间长度,在枚举左端点,枚举每个区间长度时,他们的k总是只从1到n,只走一遍,所以这就相当于优化了一层,变成了O(n2)的. 比如len长度为3时,dp[1][3]只会枚举mid

四边形优化DP学习

转自:http://www.cnblogs.com/hadilo/p/5800306.html 在动态规划中,经常遇到形如下式的状态转移方程: m(i,j)=min{m(i,k-1),m(k,j)}+w(i,j)(i≤k≤j)(min也可以改为max) 上述的m(i,j)表示区间[i,j]上的某个最优值.w(i,j)表示在转移时需要额外付出的代价.该方程的时间复杂度为O(N3) 下面我们通过四边形不等式来优化上述方程,首先介绍什么是"区间包含的单调性"和"四边形不等式&quo

51nod - 1022【四边形不等式优化DP】

1022 石子归并 V2 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 关注 N堆石子摆成一个环.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价.计算将N堆石子合并成一堆的最小代价. 例如: 1 2 3 4,有不少合并方法 1 2 3 4 => 3 3 4(3) => 6 4(9) => 10(19) 1 2 3 4 => 1 5 4(5) => 1 9(14) =&

【四边形不等式】POJ1160[IOI2000]-Post Office

[题目大意] v个村庄p个邮局,邮局在村庄里,给出村庄的位置,求每个村庄到最近邮局距离之和的最小值. [思路] 四边形不等式,虽然我并不会证明:( dp[i][j]表示前i个村庄建j个邮局的最小值,w[i][j]表示在i到j之间建立一个邮局的最小值.w[i][j]显然取i~j的中位数,可以在O(1)时间内求出. 显然dp[i][j]=min{dp[k][j-1]+w[k+1][i]}. 傻傻写错i和j…… 1 #include<iostream> 2 #include<cstdio>

四边形不等式优化DP——石子合并问题 学习笔记

好方啊马上就要区域赛了连DP都不会QAQ 毛子青<动态规划算法的优化技巧>论文里面提到了一类问题:石子合并. n堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分. 求出将n堆石子合并成一堆的最小得分和最大得分以及相应的合并方案. 设m[i,j]表示合并d[i..j]所得到的最小得分. 状态转移方程: 总的时间复杂度为O(n3). [优化方案] 四边形不等式: m[i,j]满足四边形不等式 令s[i,j]=max{k | m[

四边形密铺平面

任意四边形可以密铺整个二维平面,这里将给出其代码实现. void CTileQuadrangleGridDrawer::BuildTileQuadrangle(Vector3* v) { Vector2 vDis01 = m_quadPositions[0] - m_quadPositions[1]; Vector2 vDis32 = m_quadPositions[3] - m_quadPositions[2]; Vector2 vDis03 = m_quadPositions[0] - m_

UVa 10003 (可用四边形不等式优化) Cutting Sticks

题意: 有一个长为L的木棍,木棍中间有n个切点.每次切割的费用为当前木棍的长度.求切割木棍的最小费用. 分析: d(i, j)表示切割第i个切点到第j个切点这段所需的最小费用.则有d(i, j) = min{d(i, k) + d(k, j)} + a[j] - a[i]; ( i < k < j ) 最后一项是第一刀的费用. 时间复杂度为O(n3) 最后还要注意一下输出格式中整数后面还要加一个句点. 1 //#define LOCAL 2 #include <iostream>

51nod 1022 石子归并 V2(四边形不等式)

分析:记dp[i][j]为从i到j合并的最小代价(顺时针,i可以大于j),sum[i][j]为从i到j的和,则dp[i][j]=min{dp[i][k-1]+dp[k][j]}+sum[i][j],(i<k<=j),直接求的话复杂度为O(n^3),会T. 四边形不等式优化:记s[i][j]为dp[i][j]取得最小值时对应的k值,则有dp[i][j]=min{dp[i][k-1]+dp[k][j]}+sum[i][j],(s[i][j-1]<=k<=s[i+1][j]),可以证明,

opengl绘图,画一个旋转的四边形和一个旋转的三角形,平滑着色和单一着色

opengl单一着色和平滑着色,以及图形的旋转 package com.example.zp.myapplication;   import java.nio.FloatBuffer;     import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10;   import android.opengl.GLSurfaceView.Renderer;   publi