题解:AT_cf16_exhibition_final_e Water Distribution
题目链接:link。
这道题目我们有 \(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的更多相关文章
- E - Water Distribution
E - Water Distribution 题目大意: 有\(N\)座城市,给定这\(N\)座城市的坐标和初始的水量\(x_i,y_i,a_i\),在两个城市之间运水的花费是两个城市的欧几里得距离. ...
- Atcoder CODE FESTIVAL 2016 Grand Final E - Water Distribution
Atcoder CODE FESTIVAL 2016 Grand Final E - Water Distribution 题目链接:https://atcoder.jp/contests/cf16- ...
- 算法与数据结构基础 - 图(Graph)
图基础 图(Graph)应用广泛,程序中可用邻接表和邻接矩阵表示图.依据不同维度,图可以分为有向图/无向图.有权图/无权图.连通图/非连通图.循环图/非循环图,有向图中的顶点具有入度/出度的概念. 面 ...
- 海量数据挖掘MMDS week1: Link Analysis - PageRank
http://blog.csdn.net/pipisorry/article/details/48579435 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...
- 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]题解(python):042-Trapping Rain Water
题目来源 https://leetcode.com/problems/trapping-rain-water/ Given n non-negative integers representing a ...
- 【题解】【直方图】【Leetcode】Trapping Rain Water
Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...
- [LeetCode]题解(python):011-Container With Most Water
题目来源: https://leetcode.com/problems/container-with-most-water/ 题意分析: 给出一个n长度的非0数组,a1,a2,……,an,ai代表在坐 ...
- [LeetCode] Trapping Rain Water II 题解
题意 题目 思路 我一开始想的时候只考虑到一个结点周围的边界的情况,并没有考虑到边界的高度其实影响到所有的结点盛水的高度. 我们可以发现,中间是否能够盛水取决于边界是否足够高于里面的高度,所以这必然是 ...
随机推荐
- 介绍一个不知道怎么形容的小东西--Proxy
what's this? The Proxy object is used to define custom behavior for fundamental operations (e.g. pro ...
- DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
大家好,我是狂师. 前阵子在知乎闲逛时,有个问题激起了大家的热议:"DeepSeek 如何颠覆传统软件测试?测试工程师会被淘汰吗".这看似简单的一问,激起层层思考,针对这个问题,今 ...
- 张高兴的大模型开发实战:(三)使用 LangGraph 为对话添加历史记录
目录 基础概念 环境搭建与配置 将对话历史存储至内存 将对话历史存储至 PostgreSQL 在构建聊天机器人时,对话历史记录是提升用户体验的核心功能之一,用户希望机器人能够记住之前的对话内容,从而避 ...
- 【Java】(机考常用)类集
类集框架(集合框架)是一个用来代表和操纵集合的统一架构.所有的类集框架都包含如下内容: 接口:是代表类集的抽象数据类型.之所以定义多个接口,是为了以不同的方式操作集合对象. 例如:Collection ...
- 在 VS Code 中,一键安装 MCP Server!
大家好!我是韩老师. 本文是 MCP 系列文章的第三篇.之前的两篇文章是: Code Runner MCP Server,来了! 从零开始开发一个 MCP Server! 经过之前两篇文章的介绍,相信 ...
- H5 电商新势力崛起:ZKmall模板商城 H5 版本的高性能开发秘籍
H5电商新势力的崛起中,ZKmall模板商城H5版本以其高性能和灵活性脱颖而出.以下是ZKmall模板商城H5版本的高性能开发秘籍,结合技术选型.架构优化与核心实践,为全场景电商应用提供高效解决方案: ...
- markdown常用命令行格式
Markdown 主要命令(语法)如下: 标题 使用 # 号表示标题,# 的个数决定标题的级别: 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 段落 & 换行 直接输入文字形成段 ...
- 线程,yield()
一.定义:暂停当前正在执行的线程对象,并执行其他线程 yield()应该做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会. 因此,使用yield()的目的是让相同优先级的 ...
- 🎀spring @conditional介绍及使用
简介 @Conditional 是 Spring 框架中用于条件化注册 Bean的核心注解,它允许开发者根据特定条件决定是否将某个Bean注册到 Spring 容器中.这一机制在实现多环境配置.模块化 ...
- 根据返回值,判断是否执行下一步的方法(Run Keyword And Return Status指令的使用)
场景分析: 上图"通用模版测试"内容 满足,如果当前页面存在这条数据,即结束执行本条用例,自动执行下一条.如果没有,则调用新建模版关键字,执行新建模版. 脚本如下 1配置运费模版 ...