• P1378 油滴扩展[深搜]


    题目描述###

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

    输入格式###

    第1行一个整数N。
    第2行为长方形边框一个顶点及其对角顶点的坐标,x,y,x’,y’。
    接下去N行,每行两个整数xi,yi,表示盒子的N个点的坐标。
    以上所有的数据都在[-1000,1000]内。

    搜索。

    #include<bits/stdc++.h>
    using namespace std;
    const long double pi = 3.1415926535;
    int x,y,xx,yy,n,ax[10],ay[10],vis[10];
    long double maxn,r[10],dis[10][10];
    
    long double sum(long double r){
    	return pi * r * r;
    }
    
    long double dist(long double x,long double y,long double xx,long double yy){
    	return sqrt((x - xx) * (x - xx) + (y - yy) * (y - yy));
    }
    
    void dfs(int cnt){
    	if(cnt == n + 1){
    		long double ans = 0; 
    		for(int i = 1; i <= n; ++i)
    			ans += sum(r[i]);
    		maxn = max(ans,maxn);
    	}
    	for(int i = 1; i <= n; i++){
    		if(vis[i]) continue;
    		r[i] = min(min(abs(x - ax[i]),abs(xx-ax[i])),min(abs(y - ay[i]),abs(yy - ay[i])));
    		for(int j = 1; j <= n; ++j){
    			if(i != j && vis[j]) r[i] = min(r[i],max(dis[i][j] - r[j],(long double)0.0));
    		}	
    		vis[i] = 1;
    		dfs(cnt + 1); 
    		vis[i] = 0;
    		r[i] = 0x3f3f3f3f;
    	}
    } 
    int main(){
    	cin >> n >> x >> y >> xx >> yy;
    	for(int i = 1; i <= n; i++){
    		cin >> ax[i] >> ay[i];
    	}
    	for(int i = 1; i <= n; ++i)
    		for(int j = 1; j <= n; ++j)
    			dis[i][j] = dis[j][i] = dist(ax[i],ay[i],ax[j],ay[j]);
    	for(int i = 1; i <= n; ++i) r[i] = 0x3f3f3f3f;
    	dfs(1);
    	long double ans = abs(x - xx) * abs(y - yy) - maxn; 
    	cout << (long long)(ans + 0.5) << endl;	
    	
    	return 0;
    }
    
  • 相关阅读:
    Android开发日记(三)
    Android开发日记(二)
    Bundle savedInstanceState的作用
    Android Bundle类
    Consumer
    饭卡
    《CLR via C#》读书笔记 之 泛型
    WCF寄宿到Windows Service
    WCF中配置文件解析
    WCF Service Configuration Editor的使用
  • 原文地址:https://www.cnblogs.com/FoxC/p/11484818.html
Copyright © 2020-2023  润新知