传送门

数据范围给的很小啊,n >= 0 && n <= 7,所以给了DFS生存的空间。

对于每一个油滴,可以说在它下一个油滴放置之前,当前的这个油滴的半径并不确定(但是对于边界情况是可以判断的)。

当把下一个油滴滴入时,当前油滴的半径就已经确定了(如果这个油滴滴在上一个油滴的范围内,就直接return 0,避免冗余计算)。

注意:在DFS中每次的r[j]和v[j]都要重置为0(血的教训)。

CODE:

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <cctype>
#include <queue>
#include <cmath>
#define zxy(i,a,b) for(int i = a ; i <= b ; i++)
#define zxyzxy(i,a,b) for(int i = a ; i < b ; i++)
#define yxz(i,a,b) for(int i = a ; i >= b ; i--)
#define yxzyxz(i,a,b) for(int i = a ; i > b ; i--)
#define gameover printf("\n")
#define N 1000005
#define mod 100003
#define INF 0x7fffffff
#define PI 3.14159265358979323846
#define y1 y111111111111
#define bin return
typedef long long ll;
typedef double db;
typedef float fl;
typedef char cr;
using namespace std;
int read()
{
int x = ,t = ;
char c = getchar();
while((c > '' || c < '') && c != '-')
c = getchar();
if(c == '-')
t = -,c = getchar();
while(c >= '' && c <= '')
x = x * + c - ,c = getchar();
bin x * t;
} void write(ll x)
{
if(x < )
x = -x,putchar('-');
if(x >= )
write(x / );
putchar(x % + '');
} int n;
int x2,y2,x1,y1;
int x[N],y[N];
int v[N];
db o = -,r[N];
int quick_pow(int a,int b)
{
int base = a,ans = ;
while(b)
{
if(b & )
ans = ans * base;
base = base * base;
b>>=;
}
bin ans;
} db mymin(db a,db b)
{
if(a > b)
return b;
bin a;
} db mymax(db a,db b)
{
if(a > b)
return a;
bin b;
} db dis(int xx,int yy,int xxx,int yyy)
{
bin sqrt(quick_pow((abs(xx - xxx)),) + quick_pow((abs(yy - yyy)),));
} db work(int i)
{
zxy(j,,n)
if(j != i && v[j])
if(r[j] > dis(x[j],y[j],x[i],y[i]))
return ;
db lr = min(abs(x[i] - x2),abs(x[i] - x1));
db hb = min(abs(y[i] - y2),abs(y[i] - y1));
db ans = mymin(lr,hb);
db distance;
zxy(j,,n)
if(j != i && v[j])
{
distance = dis(x[j],y[j],x[i],y[i]) - r[j];
ans = min(ans,distance);
}
bin ans;
} void DFS(int i,db step)
{
if(i > n)
{
o = mymax(o,step);
bin;
} zxy(j,,n)
{
if(!r[j])
{
r[j] = work(j);
v[j] = ;
DFS(i + ,step + PI * r[j] * r[j]);
v[j] = ;
r[j] = ;
}
}
} int main()
{
n = read();
x2 = read(),y2 = read(),x1 = read(),y1 = read();
db s = abs(x2 - x1) * abs(y2 - y1);
zxy(i,,n)
x[i] = read(),y[i] = read();
DFS(,);
// cout<<o<<endl;
printf("%.0lf\n",s - o);
gameover;
bin ;
}
/*
3
-98 5 30 30
-42 11
-51 17
-11 22
*/

Luogu P1381油滴扩展的更多相关文章

  1. luogu P1378 油滴扩展

    题目描述 在一个长方形框子里,最多有N(0≤N≤6)个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界.必须等一个油滴扩展完毕才能放置下一个油滴. ...

  2. [动态规划]P1378 油滴扩展

    题目描述 在一个长方形框子里,最多有N(0≤N≤6)个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界.必须等一个油滴扩展完毕才能放置下一个油滴. ...

  3. 洛谷 P1378 油滴扩展 Label:搜索

    题目描述 在一个长方形框子里,最多有N(0≤N≤6)个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界.必须等一个油滴扩展完毕才能放置下一个油滴. ...

  4. P1378 油滴扩展

    题目描述 在一个长方形框子里,最多有N(0≤N≤6)个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界.必须等一个油滴扩展完毕才能放置下一个油滴. ...

  5. P1378 油滴扩展 dfs回溯法

    题目描述 在一个长方形框子里,最多有N(0≤N≤6)个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界.必须等一个油滴扩展完毕才能放置下一个油滴. ...

  6. 洛谷 P1378 油滴扩展 改错

    P1378 油滴扩展 题目描述 在一个长方形框子里,最多有\(N(0≤N≤6)\)个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界.必须等一个油 ...

  7. 题解 P1378 【油滴扩展】

    题面 在一个长方形框子里,最多有N(0≤N≤6)个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界.必须等一个油滴扩展完毕才能放置下一个油滴.那么 ...

  8. 洛谷P1378油滴扩展

    题目描述 在一个长方形框子里,最多有N(0≤N≤6)个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界. 必须等一个油滴扩展完毕才能放置下一个油滴 ...

  9. 洛谷P1378 油滴扩展

    P1378 油滴扩展 题目描述 在一个长方形框子里,最多有N(0≤N≤6)个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界.必须等一个油滴扩展完 ...

随机推荐

  1. 删除 $PATH 路径下多余的文件地址

    将如下去 多余文件删除就可以了

  2. python面试题---收藏的笔记

    第一部分 Python基础篇(80题) 为什么学习Python? 通过什么途径学习的Python? Python和Java.PHP.C.C#.C++等其他语言的对比? 简述解释型和编译型编程语言? P ...

  3. 拦截请求并记录相应信息-springboot

    方式: 1.FIlter过滤器 2.interceptor拦截器 3.Aspect切片 一.Filter过滤器形式 只能处理request中的数据  不能确定请求要走的是哪个controller信息 ...

  4. inotify+rsync文件实时同步报错:usr/local/bin/inotifywait: error while loading shared libraries: libinotifytools.so.0:

    解决办法: ln -sv /usr/local/lib/libinotify* /usr/lib/ /usr/lib64/libinotifytools.so.

  5. C++中的继承(3)作用域与重定义,赋值兼容规则

    1.作用域与重定义(同名隐藏) 一样的,先上代码 1 class A 2 { 3 public: 4 int a_data; 5 void a() 6 { 7 cout << " ...

  6. UNIX环境高级编程、 现代操作系统概念

    UNIX环境高级编程 现代操作系统概念 讲讲内存屏障

  7. Selenium自动化测试之元素定位

    步骤: 1.通过前端工具,查看元素的属性 2.通过属性定位 iddriver.findElement(By.id("kw")) namedriver.findElement(By. ...

  8. BeautifulSoup4库

    BeautifulSoup4库 和lxml一样,Beautiful Soup也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML数据.lxml只会局部遍历,而Beautif ...

  9. python全栈开发day115、116-websocket、websocket原理、websocket加解密、简单问答机器人实现

    1.websocket 1.websocket 与轮询 轮询: 不断向服务器发起询问,服务器还不断的回复 浪费带宽,浪费前后端资源 保证数据的实时性 长轮询: 1.客户端向服务器发起消息,服务端轮询, ...

  10. mac抓包工具anyproxy

    本文以 mac为代理,ios手机为客户端举例. 文档地址:http://anyproxy.io/ 1.环境配置: 安装  node  :参考   https://www.jianshu.com/p/3 ...