题目链接:link

这道题目我们有 \(3\) 个结论:

  1. 在最优情况下,最后所有的点上的水量都是一样的。因为水多的可以向水少的运水。
  2. 不存在间接运水的情况,这个由三角形的三边关系可以得到。
  3. 最优运输路径,最后是树形的。

我们在不漏情况的条件下,枚举所有的树形。

接下来就是动态规划了!

很明显这道题目需要使用状压 dp。

我们让 \(dp_{i}\) 表示在子集 \(i\) 状态下的最小值的最大值。

而我们的动态规划的答案是 \(dp_{2^n-1}\)。

对于每个子集 \(i\) 我们做整体和分割处理,整体处理就是把子集里的所有城市看成一个连通体,如果我们设总水量为 \(S\) 城市数量为 \(M\) 那么最小值最大化就是 \(\frac{S-MST}{M}\) 其中 \(MST\) 代表这个子集的最小生成树。

然后分割处理就是将子集 \(i\) 分成两个不相交的子集 \(j\) 和 \(i\oplus j\) 我们分别计算 \(dp_j\) 和 \(dp_{i\oplus j}\) 然后与其他方式进行比较就好了。

上代码!

#include<bits/stdc++.h>
#define I using
#define AK namespace
#define IOI std
#define i_ak return
#define ioi 0
#define i_will signed
#define ak main
#define IMO ()
#define int long long
I AK IOI;
const long double inf=1e18;
int a[20],b[20],c[20],n;
long double d[20][20],t[1<<16],dp[1<<16];
int counter(int x){
int ans=0;
while(x){
ans+=x&1;
x/=2;
}
return ans;
}
i_will ak IMO{
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i]>>b[i]>>c[i];
for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)d[i][j]=sqrt(1ll*(a[i]-a[j])*(a[i]-a[j])+1ll*(b[i]-b[j])*(b[i]-b[j]));
for(int i=0;i<(1<<n);i++)t[i]=inf;
for(int i=1;i<=n;i++)t[1<<(i-1)]=0;
for(int i=1;i<(1<<n);i++)for(int j=1;j<=n;j++)if(i>>(j-1)&1)for(int k=1;k<=n;k++)if(!(i>>(k-1)&1))t[i|(1<<(k-1))]=min(t[i|(1<<(k-1))],t[i]+d[j][k]);
for(int i=1;i<(1<<n);i++){
long double w=0;
for(int j=1;j<=n;j++)if(i>>(j-1)&1)w+=c[j];
if(w>t[i])dp[i]=(w-t[i])/counter(i);
for(int t=i&(i-1);t!=0;t=(t-1)&i)dp[i]=max(dp[i],min(dp[t],dp[i^t]));
}
printf("%.10Lf\n",dp[(1<<n)-1]);
i_ak ioi;
}

亲测可过,请勿抄袭!

题解:AT_cf16_exhibition_final_e Water Distribution的更多相关文章

  1. E - Water Distribution

    E - Water Distribution 题目大意: 有\(N\)座城市,给定这\(N\)座城市的坐标和初始的水量\(x_i,y_i,a_i\),在两个城市之间运水的花费是两个城市的欧几里得距离. ...

  2. Atcoder CODE FESTIVAL 2016 Grand Final E - Water Distribution

    Atcoder CODE FESTIVAL 2016 Grand Final E - Water Distribution 题目链接:https://atcoder.jp/contests/cf16- ...

  3. 算法与数据结构基础 - 图(Graph)

    图基础 图(Graph)应用广泛,程序中可用邻接表和邻接矩阵表示图.依据不同维度,图可以分为有向图/无向图.有权图/无权图.连通图/非连通图.循环图/非循环图,有向图中的顶点具有入度/出度的概念. 面 ...

  4. 海量数据挖掘MMDS week1: Link Analysis - PageRank

    http://blog.csdn.net/pipisorry/article/details/48579435 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...

  5. CET4

    Directions: For this part, you are allowed 30 minutes to write a short essay on the challenges of st ...

  6. leetcode hard

    # Title Solution Acceptance Difficulty Frequency     4 Median of Two Sorted Arrays       27.2% Hard ...

  7. [LeetCode]题解(python):042-Trapping Rain Water

    题目来源 https://leetcode.com/problems/trapping-rain-water/ Given n non-negative integers representing a ...

  8. 【题解】【直方图】【Leetcode】Trapping Rain Water

    Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...

  9. [LeetCode]题解(python):011-Container With Most Water

    题目来源: https://leetcode.com/problems/container-with-most-water/ 题意分析: 给出一个n长度的非0数组,a1,a2,……,an,ai代表在坐 ...

  10. [LeetCode] Trapping Rain Water II 题解

    题意 题目 思路 我一开始想的时候只考虑到一个结点周围的边界的情况,并没有考虑到边界的高度其实影响到所有的结点盛水的高度. 我们可以发现,中间是否能够盛水取决于边界是否足够高于里面的高度,所以这必然是 ...

随机推荐

  1. Paimon merge into 实现原理

    语法 MERGE INTO target USING source ON source.a = target.a WHEN MATCHED THEN UPDATE SET a = source.a, ...

  2. golang 使用goto进行多错误处理

    goto 语句介绍 在 Go 语言中,可以通过goto语句跳转到标签,进行代码间的无条件跳转.另外,goto语句在快速跳出循环.避免重复退出方面可以简化代码实现过程,但在结构化程序设计中一般不主张使用 ...

  3. 元模型:开启AI哲学思考的数字奇点

    为推广动态模型让AI写的.动态模型和AI非常契合,元模型对AI有意义,所以让AI写更好.元模型其实是非常简单的一个模型,使用XML表示代码如下. <thing name="thing& ...

  4. 深入理解Hadoop读书笔记-4

    背景 公司的物流业务系统目前实现了使用storm集群进行过门事件的实时计算处理,但是还有一个需求,我们需要存储每个标签上传的每条明细数据,然后进行定期的标签报表统计,这个是目前的实时计算框架无法满足的 ...

  5. Windows桌面应用自动更新解决方案SharpUpdater5发布

    SharpUpdater是什么 SharpUpdater是一套C#桌面应用自动更新解决方案.基本上,所有自动更新程序的原理都一样:生成一份文件清单,将本地清单与云上清单对比后进行全量更新或增量更新.本 ...

  6. 新装的 MySQL 不允许远程连接

    新装的 MySQL 通常会出现这样的情况:无法远程连接,但是本地连接是正常的. 问题原因 新装的 MySQL 通常默认的用户是 root, 而为了安全起见, root 用户是不允许远程连接. mysq ...

  7. 在 .NET 中 使用 ANTLR4

    前言 本文将介绍如何在 .NET 中使用 ANTLR4 构建语法分析器.由于篇幅限制,本文不会深入讲解 ANTLR4 的语法规则,相关内容可参考 ANTLR4 的官方文档或其他资料.本文将涵盖以下内容 ...

  8. 独家推荐!这款端到端AI测试工具 Testim,让效率飙升!(支持移动端、Web端)

    在当今快速发展的软件开发时代,确保软件质量成为每个开发团队的首要任务. 随着人工智能(AI)和机器学习(ML)技术的飞速发展,AI测试工具应运而生,为软件测试领域带来了革命性的变化.今天,我要向大家强 ...

  9. Jenkins pipeline jenkinsfile的两种写作方式声明式和脚本式

    Jenkins pipeline jenkinsfile的两种写作方式,声明式和脚本式. 为什么需要pipeline? 在多年前Jenkins成为最流行的持续集成服务器的Jenkins 1.x时代,所 ...

  10. 记一次 .NET某云HIS系统 CPU爆高分析

    一:背景 1. 讲故事 年前有位朋友找到我,说他们的系统会偶发性的CPU爆高,有时候是爆高几十秒,有时候高达一分多钟,自己有一点分析基础,但还是没找到原因,让我帮忙看下怎么回事? 二:CPU爆高分析 ...