The Fortified Forest POJ - 1873
The Fortified Forest
POJ - 1873
题意:n棵树,砍掉一些树做木材将剩余的树围起来。
n较小,二进制枚举~
1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 using namespace std; 7 const double eps=1e-12; 8 const int inf=0x3f3f3f3f; 9 const int maxn=16; 10 struct Node{ 11 int x,y,vi,li; 12 bool operator < (const Node& a)const{ 13 return x<a.x||x==a.x&&y<a.y; 14 } 15 Node operator - (const Node& a){ 16 return Node{x-a.x,y-a.y}; 17 } 18 }p[maxn],vex[maxn],ch[maxn]; 19 double getdis(Node a,Node b){ 20 return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); 21 } 22 int cut[maxn],ans[maxn]; 23 24 int cross(Node a,Node b){ 25 return a.x*b.y-a.y*b.x; 26 } 27 28 double ConvexHull(Node *p,int n){ 29 if(n<=1) return 0; 30 sort(p,p+n); 31 int m=0; 32 for(int i=0;i<n;i++){ 33 while(m>1&&cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])<=0) m--; 34 ch[m++]=p[i]; 35 } 36 int k=m; 37 for(int i=n-2;i>=0;i--){ 38 while(m>k&&cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])<=0) m--; 39 ch[m++]=p[i]; 40 } 41 m--; 42 double ans=getdis(ch[0],ch[m]); 43 for(int i=0;i<m;i++) ans+=getdis(ch[i],ch[i+1]); 44 return ans; 45 } 46 int main(){ 47 int n,kase=0; 48 while(scanf("%d",&n)&&n){ 49 if(kase) puts(""); 50 for(int i=0;i<n;i++) scanf("%d%d%d%d",&p[i].x,&p[i].y,&p[i].vi,&p[i].li); 51 int sta=1<<n; 52 int minval=inf,id; 53 double res; 54 int tempval,templen; 55 for(int i=1;i<sta;i++){ 56 int cnt=0,num=0; 57 tempval=0;templen=0; 58 for(int j=0;j<n;j++) if((1<<j)&i){ 59 cut[cnt++]=j; 60 tempval+=p[j].vi; 61 templen+=p[j].li; 62 }else { 63 vex[num++]=p[j]; 64 } 65 double dis=ConvexHull(vex,num); 66 if(templen>dis&&(tempval<minval||tempval==minval&&cnt<id)){ 67 minval=tempval; 68 res=templen-dis; 69 id=cnt; 70 for(int i=0;i<cnt;i++) ans[i]=cut[i]; 71 } 72 } 73 printf("Forest %d\n",++kase); 74 printf("Cut these trees:"); 75 for(int i=0;i<id;i++) printf(" %d",ans[i]+1); 76 printf("\nExtra wood: %.2f\n",res); 77 } 78 return 0; 79 }
View Code
转载于:https://www.cnblogs.com/yijiull/p/7375970.html
The Fortified Forest POJ - 1873相关推荐
- POJ 1873 The Fortified Forest(枚举+凸包+剪枝)
POJ 1873 The Fortified Forest 题意: 某王有一些树,要制作一个栅栏将所有树围起来,栅栏制作木材来源就是砍去其中一些树. 现在输入每棵树的坐标,价值,高度,求出所围价值最大 ...
- 【poj】1873: The Fortified Forest (凸包+状态压缩+各种搞事)
题目描述: The Fortified Forest Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 7818 Accep ...
- Uva5211/POJ1873 The Fortified Forest 凸包
LINK 题意:给出点集,每个点有个价值v和长度l,问把其中几个点取掉,用这几个点的长度能把剩下的点围住,要求剩下的点价值和最大,拿掉的点最少且剩余长度最长. 思路:1999WF中的水题.考虑到其点的 ...
- The Fortified Forest UVALive - 5211 [二进制枚举+凸包周长]
The Fortified Forest UVALive - 5211 题意:n棵树,每棵树对应有x,y,v,l分别代表横坐标,纵坐标,价值,砍这棵树能构成的篱笆长度.现在要求输出,在最小被砍价值的情 ...
- uva 811 - The Fortified Forest(暴力+凸包)
题目链接:uva 811 - The Fortified Forest 最多就15棵树,枚举哪些树要砍,剩下的做凸包. #include <cstdio> #include <cst ...
- ●POJ 1873 The Fortified Forest
题链: http://poj.org/problem?id=1873 题解: 计算几何,凸包 枚举被砍的树的集合.求出剩下点的凸包.然后判断即可. 代码: #include<cmath> ...
- poj 1873 The Fortified Forest (位运算枚举 + 凸包周长)
题目链接:http://poj.org/problem?id=1873 大意:有一片N棵树的森林,要从中砍掉几棵树做成篱笆,把剩下的树围起来 输入:给N课树,每棵树的坐标是x,y,每棵树有一个vi和l ...
- POJ 1873 The Fortified Forest(凸包)
http://poj.org/problem?id=1873 题目大意: 给你n棵树每棵树的坐标,高度,价值,要求砍掉一些树,用那些木材,将其它树围起来,要求花最小的代价,代价相同,要求砍掉最少的树. ...
- POJ 1873 The Fortified Forest (凸包,状态压缩枚举)
题目链接:http://poj.org/problem?id=1873 题意:给出一些树,每棵树有坐标,高度,以及价值,要求砍掉一些树,用那些木材,将其它树围起来,要求花最小的代价,代价相同,要求砍掉 ...
最新文章
- 【Visual C++】游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理
- 常用Linux路由命令(route、ip、ifconfig等等)
- 讲真,下次打死我也不敢随便改serialVersionUID了
- python import from class_Python: import vs from (module) import function(class) 的理解
- 解决properties文件乱码问题(eclipse和MyEclipse)
- 网页浏览器知道我们的哪些信息?(1)
- 闭包---在函数内部再定义一个函数
- 步进电机为什么无法高速启动?
- XP---VS05---部署个人网站初学者工具包---方案
- 深入研究:HTTP2的真正性能到底如何
- Linux基础四---系统监控硬盘分区
- 华为数通 软开 2022校招 面试全过 已开奖
- 记一个用PyPDF2裁剪pdf文件并用latex插入后出现大量空白的问题
- 建立一个被称为sroot()的函数,返回其参数的二次方根,重载sroot()三次,让它返回整数,长整数与双精度的二次方根
- Android 在导航栏上添加一个截屏按键,点击进行截屏
- java 格式化时分秒_java整数(秒数)转换为时分秒格式的示例
- 微软翻译与服务器断开,一水的机翻?微软中文翻译也闹笑话了
- Linux判断服务进程存在,存在则重启,不存在则启动
- 新西兰android时区代码,Android北京时间转换为新西兰时间
- 爬取全国大学校徽合集批量制作队牌
热门文章
- get和post的区别(传参方式)
- php集成封装monolog日志类
- Monolog php日志
- PostgreSQL copy 命令教程
- EPOLLOUT分析
- vs2015或vs2017报错未能安装包“Microsoft.VisualCpp.Redist.14,version=14.16.27012.2,chip=x86 错误代码55的解决办法!
- 《万历十五年》的感想
- 微信小程序动画(四):平移
- [架构之路-105]:《软件架构设计:程序员向架构师转型必备》-15-模块划分的综合技术与4步骤法
- 将来不会倒闭的8种行业,你上车了吗?