随笔分类 -  凸包

摘要:题意:给出一些树的位置,价值,长度,现要求先砍一些树制成一定长度的篱笆将剩余的树围起来,求要砍树的最小总价值。因为树的个数最多为15个很容易想到用二进制数表示树的状态进行遍历。#include<iostream>#include<cstdio>#include<cmath>using namespace std;#define MAX_INT 123456789#define esp 10e-8struct point { int x,y;};point vertex[16];int res[16],Choice[16],noChoice[16],minLe 阅读全文
posted @ 2011-11-13 18:50 书山有路,学海无涯 阅读(200) 评论(0) 推荐(0) 编辑
摘要:题目大意就是最大点对距,最大点对距的两端点一定是凸包顶点,所以找出形成凸包所需要的最少顶点,然后遍历找出最大点对距。对凸包算法的详细讲解:http://www.cnblogs.com/Booble/archive/2011/03/10/1980089.html#include<iostream>#include<cstdio>using namespace std;struct point{ int x,y;};point vertex[500000],res[500000];int cmp(const void * a,const void* b){ point p1 阅读全文
posted @ 2011-11-12 20:20 书山有路,学海无涯 阅读(238) 评论(0) 推荐(0) 编辑
摘要:题意:给出一个去掉几个点后的凸包,判断是不是原始凸包。看了大牛的思想后才知道:只要判断凸包的每个边上有三个顶点,就可以判断该凸包为原始凸包。1、少于六个点不可能是原始凸包。2、利用graham算法找出形成该凸包至少需要的顶点,存进数组res[]中,剩余的存进leave[]数组中。3、遍历两个数组判断是否满足条件。#include<iostream>#include<cstdio>using namespace std;#define MAX_INT 123456789struct point{ int x,y;};point vertex[1000];int res[1 阅读全文
posted @ 2011-11-12 08:39 书山有路,学海无涯 阅读(657) 评论(0) 推荐(0) 编辑
摘要:我的第一道凸包题,终于弄懂了Graham算法,对我来说弄懂一个算法是一个痛苦的过程,我痛苦了我好几天……Grahma算法模板:1、 寻找一个基准点,这个点通常是最左边的最下面那个点(其实只要这个点一定会在凸包边界上就行),然后将之个点置于第一个位置。2、 将所有点按相对于基准点的极角排序。3、 因为排序之后前两个点一定会在凸包上,假设第三个点也在凸包上,因此我们可以从第四个点开始依次扫描每个点。对于每个当前点他在当前时刻是极角最大的点,所以在当前时刻它必定在凸包上,那么此时就可能改变了它前一个点是不是在凸包上。怎么判断呢?我们可以咱当前点到推三个点,假设是p1,p2,p3,判断这三个点所形成的 阅读全文
posted @ 2011-11-05 13:56 书山有路,学海无涯 阅读(1244) 评论(1) 推荐(0) 编辑

点击右上角即可分享
微信分享提示