UVA 1084 deer-proof fence
题目大意:
N个点的半径为M的圆,求最小周长的方案使他们都被包含在所画的图形中(可以相隔)。
因为N<=9,显然可以想到状压dp。一开始我死活想不出来求圆弧的面积(我是撒币吗),最后经dalao指点才想到圆弧的总长就是一个半径为M的圆的周长(显然得证法证明)。
那么可以得到方程f[i]=min(f[j]+f[i^j]),j为i的所有子集。先处理g[i]表示i组成一个图形的周长,周长是i中所有点的凸包总长+2πM。那么问题就迎刃而解了。
附代码(小学dalao好厉害):
#include<bits/stdc++.h>
using namespace std;
struct Node{int x,y;}a[15],s[15],x[15];
inline bool cmp(Node a,Node b){return a.x<b.x;}
int n,ls,lx,m;
inline double dis(Node l,Node r){return sqrt((l.x-r.x)*(l.x-r.x)+(l.y-r.y)*(l.y-r.y));}
double f[2049];
double yz;
int main(){int tot=0;f[0]=0; while(scanf("%d%d",&n,&m),n+m){for(int i=0;i<1024;i++) f[i]=1008610086;yz=2*m*acos(-1);for(int i=0;i<n;i++) scanf("%d%d",&a[i].x,&a[i].y);sort(a,a+n,cmp);for(int j=(1<<n)-1;j>=1;j--){ls=lx=0;for(int i=0;i<n;i++)if((1<<i)&j){if(!ls) s[ls++]=x[lx++]=a[i];else{while(ls>1&&(s[ls-1].y-s[ls-2].y)*(a[i].x-s[ls-1].x)<(a[i].y-s[ls-1].y)*(s[ls-1].x-s[ls-2].x)) ls--;s[ls++]=a[i];while(lx>1&&(x[lx-1].y-x[lx-2].y)*(a[i].x-x[lx-1].x)>(a[i].y-x[lx-1].y)*(x[lx-1].x-x[lx-2].x)) lx--;x[lx++]=a[i];}}f[j]=yz;for(int i=1;i<ls;i++) f[j]+=dis(s[i],s[i-1]);for(int i=1;i<lx;i++) f[j]+=dis(x[i],x[i-1]);}for(int i=1;i<(1<<n);i++)for(int j=1;j<i;j++)if(i|j==i) f[i]=min(f[i],f[i^j]+f[j]);tot++;printf("Case %d: length = %.2lf\n",tot,f[(1<<n)-1]);}return 0;
}
UVA 1084 deer-proof fence相关推荐
- [搜索]UVa 129 困难的串
题意:将一个包含两个相邻的重复子串的子串,称为"容易的串",其他为"困难的串". 输入正整数n和l,输出由前l个字符组成的,字典序第n小的困难的串. 输入样例: ...
- uva 401.Palindromes
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- Uva 3767 Dynamic len(set(a[L:R])) 树套树
Dynamic len(set(a[L:R])) Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://uva.onlinejudge.org/in ...
- UVA 11752 超级幂
UVA 11752 超级幂 Z - The Super Powers Time Limit:1000MS Memory Limit:0KB 64bit IO Format:%lld & ...
- UVa 11174 - Stand in a Line
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- UVa 10112 - Myacm Triangles
UVa第一卷最后一题. 求内部不含点并且面积最大的三角形. 暴力. 代码如下: 1 #include<iostream> 2 #include<cstdio> 3 #inclu ...
- UVa 10180 - Rope Crisis in Ropeland!
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=41&pa ...
- Uva 10074【递推dp】
UVa 10074 题意:求01矩阵的最大子0矩阵. http://www.csie.ntnu.edu.tw/~u91029/MaximumSubarray.html#2 这里说的很清楚.先求Larg ...
- UVA 116 Unidirectional TSP DP
题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&p ...
最新文章
- json11库的使用
- Android 笔记:BroadcastReceiver
- 牛客练习赛33 D	tokitsukaze and Inverse Number (树状数组求逆序对,结论)
- 设置select默认值
- Go的遍历map与slice的区别:map无序slice有序
- Linux下的程序调试——GDB
- C#判断指定文件是否存在
- open() 函数以 w+ 模式打开文件
- 如何做软件需求分析(个人工作经验总结)
- Atitit.软件开发的三层结构isv金字塔模型
- 蓝桥杯题目练习(摆动序列)
- pop3 c语言,VisualC#编写实现POP3的程序
- 三菱MDS-D-SVJ3-10/20/10NA/20NA伺服驱动器
- 英语b计算机考试时间2015年,2014年12月大学英语B 计算机应用基础考试工作安排...
- 2020最新抖音上热门技巧你知道了几个?
- 修复Joe主题静态资源为国内地址
- <blockquote>标签 自定义样式
- PHP中GD库的使用
- windows控制iPhone(不需要蓝牙)
- 区块链应用开发快速入门