前言:麻麻我会写状压DP了!

----------------------------

题目描述

愚人节到了!可爱的UOI小朋友要给孩子们送礼物(汗~原题不是可爱的打败图么= =..)。在平面直角坐标系上(欧氏的),有 N (N≤17)个点,分别代表 N 个小朋友的地理位置;还有一个点,这是UOI的家,UOI的所有礼物都放在这里,UOI必须驼着礼物从这里出发,送完礼物以后再返回这里,然后再拿出礼物出发。UOI身上每多驼一个礼物,他的速度就减半。已知他不驼礼物的速度是 V。为了不耽误(你懂的),UOI必须尽快完成这个任务。求完成任务的最短时间。

输入格式

第1行 1 个正整数,表示小朋友的个数。

以下 N+1 行每行两个整数,除第一个表示UOI的家以外,其他都表示一个小朋友的坐标。

最后一行一个整数 V,表示UOI的速度。

输出格式

输出一个整数,表示最短时间。四舍五入。

----------------------------------------------------------

作为一道变形的状压DP题,其转移方程还是比较简单的(亏我好几个小时都没想到QAQ)。我们首先证明一个结论:

要保证方案的最优性,每次最多只能携带两个礼物。

证明:假设现在原点为$O$,平面上有$A,B,C$三个点。假如我们一次性走完,那么费用是$8OA+4AB+2BC+CO$;如果我们先走$A$点,再走$B$点和$C$点,那么费用是$3OA+4OB+2BC+CO$,两式相减,得$5OA+4AB-4OB=OA+4(OA+AB-OB)$,在三角形$OAB$中$OA+AB-OB>0$,所以相减之后的式子是大于$0$的。得证选三个点不优。对于大于三个点的情况,可以类比成多个三角形和线段组合成的图形,证明方法是类似的。证毕。复杂度$O(n^2 2^n)$

状态转移方程:假设$1$表示不选,$0$表示选,则有:

$f[k]=\min (f[k],\min(f[k|(1<<(i-1)|1<<(j-1)]+cost(i,j),f[k|1<<(i-1)]+cost(i))$

约束条件:

if (!<<(i-)&k&&!<<(j-)&k)

注意开$long\ long$!!!!!!!!!!!(被这个卡了好久QAQ)

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,x[],y[],v;
double f[],ans,dis[][];
double cal(int a,int b)
{
return sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b]));
}
double C1(int a,int b)
{
if (dis[][a]<dis[][b]) swap(a,b);
return (*dis[][b]+*dis[a][b]+dis[a][])/v;
}
double C2(int i)
{
return *dis[i][]/v;
}
signed main()
{
scanf("%lld",&n);
scanf("%lld%lld",&x[],&y[]);
for (int i=;i<=n;i++) scanf("%lld%lld",&x[i],&y[i]);
scanf("%lld",&v);
for (int i=;i<=n;i++)
for (int j=i;j<=n;j++) dis[i][j]=dis[j][i]=cal(i,j);
for (int i=(<<n)-;i>=;i--)
{
f[i]=1e18;
for (int j=;j<=n;j++)
{
if ((<<(j-))&i) continue;
for (int k=j+;k<=n;k++)
{
if ((<<(k-))&i) continue;
f[i]=min(f[i],f[i|(<<(j-))|(<<(k-))]+C1(j,k));
}
f[i]=min(f[i],f[i|(<<(j-))]+C2(j));
}
}
printf("%.0lf",f[]);
return ;
}

【FZYZOJ】愚人节礼物 题解(状压DP)的更多相关文章

  1. NOIP2016提高A组 A题 礼物—概率状压dp

    题目描述 夏川的生日就要到了.作为夏川形式上的男朋友,季堂打算给夏川买一些生 日礼物. 商店里一共有n种礼物.夏川每得到一种礼物,就会获得相应喜悦值Wi(每种礼物的喜悦值不能重复获得). 每次,店员会 ...

  2. O - Matching 题解(状压dp)

    题目链接 题目大意 给你一个方形矩阵mp,边长为n(n<=21) 有n个男生和女生,如果\(mp[i][j]=1\) 代表第i个男生可以和第j个女生配对 问有多少种两两配对的方式,使得所有男生和 ...

  3. [BZOJ 1879][SDOI 2009]Bill的挑战 题解(状压DP)

    [BZOJ 1879][SDOI 2009]Bill的挑战 Description Solution 1.考虑状压的方式. 方案1:如果我们把每一个字符串压起来,用一个布尔数组表示与每一个字母的匹配关 ...

  4. NOIP2017 宝藏 题解报告【状压dp】

    题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的 m 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋中的宝藏.但是 ...

  5. TZOJ 2289 Help Bob(状压DP)

    描述 Bob loves Pizza but is always out of money. One day he reads in the newspapers that his favorite ...

  6. 【bzoj5161】最长上升子序列 状压dp+打表

    题目描述 现在有一个长度为n的随机排列,求它的最长上升子序列长度的期望. 为了避免精度误差,你只需要输出答案模998244353的余数. 输入 输入只包含一个正整数n.N<=28 输出 输出只包 ...

  7. TZOJ 4912 炮兵阵地(状压dp)

    描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P" ...

  8. POJ 1684 Corn Fields(状压dp)

    描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ ...

  9. 【uoj#37/bzoj3812】[清华集训2014]主旋律 状压dp+容斥原理

    题目描述 求一张有向图的强连通生成子图的数目对 $10^9+7$ 取模的结果. 题解 状压dp+容斥原理 设 $f[i]$ 表示点集 $i$ 强连通生成子图的数目,容易想到使用总方案数 $2^{sum ...

随机推荐

  1. 阿里云服务器ecs配置之安装jdk(转)

    一.安装环境 操作系统:Centos 7.4 JDK版本:1.8 工具:Xshell5.Xftp5 二.安装步骤 第一步:下载安装包 (官网)链接: 下载适合自己系统的jdk版本,如图:我下载的是64 ...

  2. java 面向对象(四十一):反射(五)反射应用二:获取运行时类的完整结构

    我们可以通过反射,获取对应的运行时类中所有的属性.方法.构造器.父类.接口.父类的泛型.包.注解.异常等....典型代码: @Test public void test1(){ Class clazz ...

  3. 05 flask源码剖析之配置加载

    05 Flask源码之:配置加载 目录 05 Flask源码之:配置加载 1.加载配置文件 2.app.config源码分析 3.from_object源码分析 4. 总结 1.加载配置文件 from ...

  4. bzoj3620似乎在梦中见过的样子

    bzoj3620似乎在梦中见过的样子 题意: 给出一个字符串,要求求出形如A+B+A的子串数量,且lenA≥k,lenB≥1.字符串长度≤15000,k≤100,所以字符长度为小写字母. 题解: 第一 ...

  5. 【翻译】.NET 5中的性能改进

    [翻译].NET 5中的性能改进 在.NET Core之前的版本中,其实已经在博客中介绍了在该版本中发现的重大性能改进. 从.NET Core 2.0到.NET Core 2.1到.NET Core ...

  6. SSRF漏洞简单分析

    什么是SSRF漏洞 SSRF(服务器端请求伪造)是一种由攻击者构造请求,服务器端发起请求的安全漏洞,所以,一般情况下,SSRF攻击的目标是外网无法访问的内部系统. SSRF漏洞形成原理. SSRF的形 ...

  7. 状态模式(c++实现)

    状态模式 目录 状态模式 模式定义 模式动机 UML类图 源码实现 优点 缺点 模式定义 状态模式(state),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 模式动机 状 ...

  8. MAC地址和交换机

    数据链路层主要关注三个问题: 这个包是发给谁的?谁应该接收? 大家都在发,会不会产生混乱?有没有谁先发.谁后发的规则? 如果发送的时候出现了错误,怎么办? 数据链路层也称为MAC(Medium Acc ...

  9. 设计模式:interpreter模式

    理解:可以广义的理解为创造一种语言,实现该语言的解释器,然后用创造的语言编写程序 对比:如xml就是一种语言,解析xml的代码就是解释器 例子: //目标:定义4中几种命令,使用C++解析 //如下: ...

  10. 【最短路+bfs+缩点】Paint the Grid Reloaded ZOJ - 3781

    题目: Leo has a grid with N rows and M columns. All cells are painted with either black or white initi ...