zoukankan      html  css  js  c++  java
  • 洛谷P1378 油滴扩展

    题目:https://www.luogu.org/problem/show?pid=1378

    题目描述

    在一个长方形框子里,最多有N(0≤N≤6)个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界。必须等一个油滴扩展完毕才能放置下一个油滴。那么应该按照怎样的顺序在这N个点上放置油滴,才能使放置完毕后所有油滴占据的总体积最大呢?(不同的油滴不会相互融合)

    注:圆的面积公式V=pi*r*r,其中r为圆的半径。

    输入输出格式

    输入格式:

    第1行一个整数N。

    第2行为长方形边框一个顶点及其对角顶点的坐标,x,y,x’,y’。

    接下去N行,每行两个整数xi,yi,表示盒子的N个点的坐标。

    以上所有的数据都在[-1000,1000]内。

    输出格式:

    一行,一个整数,长方形盒子剩余的最小空间(结果四舍五入输出)

    输入输出样例

    输入样例#1:
    2
    20 0 10 10
    13 3
    17 7
    
    输出样例#1:
    50

    解析:因为n<=6,所以只需要暴力枚举每一种排列即可。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cmath>
     5 #define pi 3.1415926535897932384
     6 using namespace std;
     7 
     8 int n;
     9 double x,y,x2,y2;  //x,y left up x1,y1 right down
    10 double xx[10],yy[10];
    11 double ans=0;
    12 
    13 int vis[10];
    14 double nx[10],ny[10],nr[10];
    15 
    16 void dfs(int step,double s){
    17     if (step==n+1){
    18         ans=max(ans,s);
    19         return;
    20     }
    21     for (int i=1;i<=n;++i)
    22     if (!vis[i]){
    23         vis[i]=1;
    24         nx[step]=xx[i],ny[step]=yy[i];
    25         nr[step]=min(min(x2-nx[step],nx[step]-x),min(y2-ny[step],ny[step]-y));
    26         //cout<<nr[i]<<endl;
    27         for (int j=1;j<=step-1;++j){
    28             nr[step]=min(nr[step],sqrt((nx[step]-nx[j])*(nx[step]-nx[j])+(ny[step]-ny[j])*(ny[step]-ny[j]))-nr[j]);
    29             if (nr[step]<=0){
    30                 nr[step]=0;
    31                 break;
    32             }
    33         }
    34         dfs(step+1,s+pi*nr[step]*nr[step]);
    35         vis[i]=0;
    36     }
    37 }
    38 
    39 int main(){
    40     scanf("%d",&n);
    41     scanf("%lf%lf%lf%lf",&x,&y,&x2,&y2);
    42     if (x>x2) swap(x,x2);
    43     if (y>y2) swap(y,y2);
    44     for (int i=1;i<=n;++i){
    45         scanf("%lf%lf",&xx[i],&yy[i]);
    46     }
    47     dfs(1,0);
    48     printf("%.0lf",(x2-x)*(y2-y)-ans);
    49     return 0;
    50 }
    戳我>_<

  • 相关阅读:
    A
    MongoDB小结17
    MongoDB小结16
    金蝶无法生成下推发票
    MongoDB小结15
    MongoDB小结14
    MongoDB小结13
    MongoDB小结12
    MongoDB小结11
    MongoDB小结10
  • 原文地址:https://www.cnblogs.com/gjc1124646822/p/6821389.html
Copyright © 2011-2022 走看看