题目大意:

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相关推荐

  1. [搜索]UVa 129 困难的串

    题意:将一个包含两个相邻的重复子串的子串,称为"容易的串",其他为"困难的串". 输入正整数n和l,输出由前l个字符组成的,字典序第n小的困难的串. 输入样例: ...

  2. uva 401.Palindromes

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  3. 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 ...

  4. UVA 11752 超级幂

    UVA 11752 超级幂 Z - The Super Powers Time Limit:1000MS     Memory Limit:0KB     64bit IO Format:%lld & ...

  5. UVa 11174 - Stand in a Line

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  6. UVa 10112 - Myacm Triangles

    UVa第一卷最后一题. 求内部不含点并且面积最大的三角形. 暴力. 代码如下: 1 #include<iostream> 2 #include<cstdio> 3 #inclu ...

  7. UVa 10180 - Rope Crisis in Ropeland!

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=41&pa ...

  8. Uva 10074【递推dp】

    UVa 10074 题意:求01矩阵的最大子0矩阵. http://www.csie.ntnu.edu.tw/~u91029/MaximumSubarray.html#2 这里说的很清楚.先求Larg ...

  9. UVA 116 Unidirectional TSP DP

    题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&p ...

最新文章

  1. json11库的使用
  2. Android 笔记:BroadcastReceiver
  3. 牛客练习赛33 D tokitsukaze and Inverse Number (树状数组求逆序对,结论)
  4. 设置select默认值
  5. Go的遍历map与slice的区别:map无序slice有序
  6. Linux下的程序调试——GDB
  7. C#判断指定文件是否存在
  8. open() 函数以 w+ 模式打开文件
  9. 如何做软件需求分析(个人工作经验总结)
  10. Atitit.软件开发的三层结构isv金字塔模型
  11. 蓝桥杯题目练习(摆动序列)
  12. pop3 c语言,VisualC#编写实现POP3的程序
  13. 三菱MDS-D-SVJ3-10/20/10NA/20NA伺服驱动器
  14. 英语b计算机考试时间2015年,2014年12月大学英语B 计算机应用基础考试工作安排...
  15. 2020最新抖音上热门技巧你知道了几个?
  16. 修复Joe主题静态资源为国内地址
  17. <blockquote>标签 自定义样式
  18. PHP中GD库的使用
  19. windows控制iPhone(不需要蓝牙)
  20. 区块链应用开发快速入门

热门文章

  1. Android 计算控件尺寸(转)
  2. 《与熊共舞》第一章--逆“风”而行
  3. 电商用户数据分析报告
  4. scrapy爬取优信二手车
  5. Java与模式学习笔记 —— 桥梁(Bridge)模式
  6. ubuntu10.04安装有线网卡驱动
  7. 阿里云oss h5页面上传实践
  8. win10 强制进入bios页面
  9. 虚拟机CentOS8安装教程
  10. Java服务超时保护_五、服务保护-Hystrix