E - Water Distribution
E - Water Distribution
题目大意:
有\(N\)座城市,给定这\(N\)座城市的坐标和初始的水量\(x_i,y_i,a_i\),在两个城市之间运水的花费是两个城市的欧几里得距离。最小水量的城市水量最大是多少。
\(N\le 15\)
题目分析:
看数据够小,要么爆搜要么状压。
可以发现这和经典的TSP问题有些类似。
考虑通过构建联通分量来调节水,那么我们设联通分量的城市数量为\(K\),联通分量中的总水量为\(A\),联通分量中总的边长是\(B\),那么不难发现我们能够达到的最大的最小水量就是\(\frac{A-B}{k}\),因为我们需要花费B的水量而总水量是\(A\)。
我们同样可以证明出一定能够到达\(\frac{A-B}{k}\),假设我们在点\(X\)和点\(Y\)之间建立了联系,那么如果\(X\)的水的量过大,就可以都运到\(Y\)否则我们就运送到\(X\)。
我们可以通过对每种城市分布都求MST的方法来得出以上我们所需要的。这样的时间复杂度为\(O(2^n*n^2)\),然后使用枚举子集的方式即可以在\(O(3^n)\)的时间复杂度内通过此题。
#include<bits/stdc++.h>
using namespace std;
const int N=17;
double dis[N][N],f[1<<N],x[N],y[N],a[N];
int n,m;
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>x[i]>>y[i]>>a[i];
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) dis[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
for(int i=0;i<=1<<n;i++) f[i]=1e18;
f[0]=0;
for(int i=0;i<n;i++) f[1<<i]=0;
for(int s=0;s<1<<n;s++){
for(int i=0;i<=n-1;i++)
for(int j=0;j<=n-1;j++)
if((s&(1<<i))&&(!(s&(1<<j)))) f[s|(1<<j)]=min(f[s|(1<<j)],f[s]+dis[i+1][j+1]);
}
for(int s=0;s<1<<n;s++){
f[s]=-f[s];
for(int i=0;i<n;i++)if(s&(1<<i)) f[s]+=a[i+1];
f[s]/=__builtin_popcount(s);
for(int t=(s-1)&s;t;t=(t-1)&s)
f[s]=max(f[s],min(f[t],f[s-t]));
}
printf("%.10lf\n", f[(1<<n)-1]);
}
E - Water Distribution的更多相关文章
- Atcoder CODE FESTIVAL 2016 Grand Final E - Water Distribution
Atcoder CODE FESTIVAL 2016 Grand Final E - Water Distribution 题目链接:https://atcoder.jp/contests/cf16- ...
- 海量数据挖掘MMDS week1: Link Analysis - PageRank
http://blog.csdn.net/pipisorry/article/details/48579435 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...
- 算法与数据结构基础 - 图(Graph)
图基础 图(Graph)应用广泛,程序中可用邻接表和邻接矩阵表示图.依据不同维度,图可以分为有向图/无向图.有权图/无权图.连通图/非连通图.循环图/非循环图,有向图中的顶点具有入度/出度的概念. 面 ...
- CET4
Directions: For this part, you are allowed 30 minutes to write a short essay on the challenges of st ...
- leetcode hard
# Title Solution Acceptance Difficulty Frequency 4 Median of Two Sorted Arrays 27.2% Hard ...
- leetcode difficulty and frequency distribution chart
Here is a difficulty and frequency distribution chart for each problem (which I got from the Interne ...
- [LeetCode] Pacific Atlantic Water Flow 太平洋大西洋水流
Given an m x n matrix of non-negative integers representing the height of each unit cell in a contin ...
- [LeetCode] Trapping Rain Water II 收集雨水之二
Given an m x n matrix of positive integers representing the height of each unit cell in a 2D elevati ...
- [LeetCode] Water and Jug Problem 水罐问题
You are given two jugs with capacities x and y litres. There is an infinite amount of water supply a ...
随机推荐
- 71、Android上对Cookie的读写操作
Cookie是为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据,在Android中也经常用到,接下来我们介绍Cookie在Android里是如何进行读写的. Cookie其实就 ...
- vijos P1740 聪明的质检员
题目链接:传送门 题目大意:给你n个物品,每件物品有重量 W 和价值 V,给m个区间,和一个标准值.(n,m最大200000) 要求找到一个值x,使得m个所有区间的权值和与标准值的差的绝对值最小.单个 ...
- Objective-C规范注释心得——同时兼容appledoc(docset、html)与doxygen(html、pdf)的文档生成
作者:zyl910 手工写文档是一件苦差事,幸好现在有从源码中抽取注释生成文档的专用工具.对于Objective-C来说,目前最好用的工具是appledoc和doxygen.可是这两种工具对于注释的要 ...
- 爬虫实战【9】Selenium解析淘宝宝贝-获取宝贝信息并保存
通过昨天的分析,我们已经能到依次打开多个页面了,接下来就是获取每个页面上宝贝的信息了. 分析页面宝贝信息 [插入图片,宝贝信息各项内容] 从图片上看,每个宝贝有如下信息:price,title,url ...
- 11.css定义下拉菜单
注意点: 1.设置a标签的width 和 height 的时候,直接设置是没用的,可以以这样两种方式设置 (1). display:block; (2). float:left; 2.设置下拉菜单,最 ...
- 报错:SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
Outline SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: trunc ...
- django--个人主页建立练习
1.前端页面采用模板继承与动态模板 {% extends 'base.html' %} {% block content %} {% for article in article_list %} &l ...
- window下安装mysql详细步骤
1.下载安装包 打开mysql官网下载页面:http://dev.mysql.com/downloads/mysql/ 1.选择相应的版本和平台 2.mysql配置 打开刚刚解压的文件夹F:\mysq ...
- 我的Android进阶之旅------>Android采用AES+RSA的加密机制对http请求进行加密
前言 未加密的抓包截图 加密之后的抓包截图 基本需求及概念 AES算法 AES基本原理及算法流程 AES算法流程 RSA算法 RSA算法基本原理及流程 RSA算法实现流程 AES与RSA相结合数据加密 ...
- Vue(6)- Vue-router进阶、单页面应用(SPA)带来的问题
一.Vue-router进阶 回顾学过的vue-router,并参考官方文档学习嵌套路由等路由相关知识. 二.单页面应用(SPA)带来的问题 1.虽然单页面应用有优点,但是,如果后端不做服务器渲染(h ...