首页 > 其他 > 详细

洛谷P1378 油滴扩展(搜索)

时间:2019-08-18 14:35:17      阅读:108      评论:0      收藏:0      [点我收藏+]

洛谷P1378 油滴扩展

直接暴力搜索更新答案就可以了

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>

using namespace std;

const int maxn = 10;
const double pi = acos(-1.0);
int vis[maxn];
double x[maxn], y[maxn], r[maxn];
double xa, xb, ya, yb, tot, ans;
int n;

double cal(int i)
{
    double ret = min(min(fabs(x[i] - xa), fabs(x[i] - xb)), min(fabs(y[i] - ya), fabs(y[i] - yb)));
    for(int j = 1; j <= n; j++){
        if(i != j && vis[j]){
            double d = sqrt((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]));
            ret = min(ret, max(d - r[j], 0.0));
        }
    }
    return ret;
}
void dfs(int k, double sum)
{
    if(k > n){
        ans = max(ans, sum);
        return;
    }
    for(int i = 1; i <= n; i++){
        if(!vis[i]){
            r[i] = cal(i);
            vis[i] = 1;
            dfs(k + 1, sum + r[i] * r[i] * pi);
            vis[i] = 0;
        }
    }
}
int main()
{
    scanf("%d", &n);
    scanf("%lf%lf%lf%lf", &xa, &ya, &xb, &yb);
    for(int i = 1; i <= n; i++){
        scanf("%lf%lf", &x[i], &y[i]);
    }
    tot = fabs(xa - xb) * fabs(ya - yb);
    ans = 0.0;
    dfs(1, 0);
    printf("%d\n", (int)(tot - ans + 0.5));
    return 0;
}

洛谷P1378 油滴扩展(搜索)

原文:https://www.cnblogs.com/solvit/p/11371690.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!