题目描述



分析

比较简单的状压DP

我们设\(f[i][j]\)为当前的状态为\(i\)且当前所在的位置为\(j\)时走过的最小距离

因为老鼠的坐标为\((0,0)\),所以我们要预处理出\(f[1<<(i-1)][i] (1 \leq i \leq n)\)的值

同时在读入的时候顺便处理处任意两个奶酪之间的距离

下面是状态转移方程

    for(int i=1;i<(1<<n);i++){
for(int j=1;j<=n;j++){
if((i&(1<<(j-1)))==0) continue;
for(int k=1;k<=n;k++){
if(k==j) continue;
if((i&(1<<(k-1)))==0) continue;
f[i][j]=min(f[i][j],f[i^(1<<(j-1))][k]+jl[k][j]);
}
}
}

思路就是枚举当前状态已经到达的城市,在已经到达的城市中枚举当前所在的城市

同时枚举上一个状态所在的城市,在所有状态中取一个最小值即可

代码

#include<bits/stdc++.h>
using namespace std;
typedef double dd;
const int maxn=18;
dd f[1<<maxn][maxn];
dd jlx[maxn],jly[maxn];
dd jl[maxn][maxn];
int main(){
for(int i=1;i<(1<<18);i++){
for(int j=0;j<18;j++){
f[i][j]=10000000.0;
}
}
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lf%lf",&jlx[i],&jly[i]);
f[1<<(i-1)][i]=(dd)sqrt(jlx[i]*jlx[i]+jly[i]*jly[i]);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
jl[i][j]=(dd)sqrt((jlx[i]-jlx[j])*(jlx[i]-jlx[j])+(jly[i]-jly[j])*(jly[i]-jly[j]));
}
}
for(int i=1;i<(1<<n);i++){
for(int j=1;j<=n;j++){
if((i&(1<<(j-1)))==0) continue;
for(int k=1;k<=n;k++){
if(k==j) continue;
if((i&(1<<(k-1)))==0) continue;
f[i][j]=min(f[i][j],f[i^(1<<(j-1))][k]+jl[k][j]);
}
}
}
dd ans=100000000.0;
for(int i=1;i<=n;i++){
ans=min(ans,f[(1<<n)-1][i]);
}
printf("%.2lf\n",ans);
return 0;
}

洛谷 P1433 吃奶酪 状压DP的更多相关文章

  1. 洛谷P3959 宝藏(状压dp)

    传送门 为什么感觉状压dp都好玄学……FlashHu大佬太强啦…… 设$f_{i,j}$表示当前选的点集为$i$,下一次要加入的点集为$j$时,新加入的点和原有的点之间的最小边权.具体的转移可以枚举$ ...

  2. 洛谷 P3112 后卫马克 —— 状压DP

    题目:https://www.luogu.org/problemnew/show/P3112 状压DP...转移不错. 代码如下: #include<iostream> #include& ...

  3. 【洛谷4941】War2 状压Dp

    简单的状压DP,和NOIP2017 Day2 找宝藏 代码几乎一样.(比那个稍微简单一点) f[i][j] ,i代表点的状态,j是当前选择的点,枚举上一个选到的点k 然后从f[i-(1<< ...

  4. 洛谷 3959 宝藏——枚举+状压dp

    题目:https://www.luogu.org/problemnew/show/P3959 原来写了个不枚举起点的状压dp. #include<iostream> #include< ...

  5. 洛谷$P3959\ [NOIp2017]$ 宝藏 状压$dp$

    正解:状压$dp$ 解题报告: 传送门$QwQ$ $8102$年的时候就想搞这题了,,,$9102$了$gql$终于开始做这题了$kk$ 发现有意义的状态只有当前选的点集和深度,所以设$f_{i,j} ...

  6. 洛谷P2473奖励关——状压DP

    题目:https://www.luogu.org/problemnew/show/P2473 还是对DP套路不熟悉... 像这种前面影响后面,而后面不影响前面的问题就应该考虑倒序递推: 看n只有15那 ...

  7. 2018.11.02 洛谷P2831 愤怒的小鸟(状压dp)

    传送门 状压一眼题. 直接f[i]f[i]f[i]表示未选择状态为iii时的最小次数. 然后考虑现在怎么转移. 显然可以直接枚举消掉某一个点或者某两个点,复杂度O(n22n)O(n^22^n)O(n2 ...

  8. 洛谷P1433 吃奶酪 题解 状态压缩DP

    题目链接:https://www.luogu.com.cn/problem/P1433 题目大意 房间里放着 \(n\) 块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在 \((0, ...

  9. 洛谷 P1433 吃奶酪【DFS】+剪枝

    题目链接:https://www.luogu.org/problemnew/show/P1433 题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处 ...

随机推荐

  1. PAT D进制的A+B

    输入两个非负 10 进制整数 A 和 B ( <=230-1 ) ,输出 A+B 的 D (1<D<=10) 进制数. 输入格式: 输入在一行中依次给出 3 个整数 A.B 和 D. ...

  2. lambda表达式操作DataTable番外篇

    using System;using System.Collections.Generic;using System.Data;using System.Linq;using System.Text; ...

  3. 小师妹学JavaIO之:目录还是文件

    目录 简介 linux中的文件和目录 目录的基本操作 目录的进阶操作 目录的腰疼操作 总结 简介 目录和文件傻傻分不清楚,目录和文件的本质到底是什么?在java中怎么操纵目录,怎么遍历目录.本文F师兄 ...

  4. mysql基础之-mysql锁和事务(七)

    0x01 MySQL锁: 执行操作时施加锁的模式 读锁:用户在读的时候施加的锁,为防止别人修改,但是用户可以读,还被称为共享锁 不会对其他用户进行阻塞 理解: ----->(这里的不阻塞,是可以 ...

  5. void out2() const{

    include "stdafx.h" include using namespace std; class aa{ int num; public: aa(){ int b =10 ...

  6. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(五)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  7. Windows下C,C++开发环境搭建指南

    Windows下C,C++开发环境搭建指南 前情提要 基于近一段时间很多网友发邮件反馈,说一些项目编译出现问题,诸如此类的情况. 就觉得很有必要写一篇C,C++开发环境的小指南,统一回复. 1.君欲善 ...

  8. @atcoder - AGC002E@ Candy Piles

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定 N 堆糖果,第 i 堆包含 ai 个糖果. 现在两人进行博 ...

  9. 安装elasticsearch的坑

    elasticsearch启动报“此时不应有 \Common 原因 Java 环境变量出错 解决 修改 elasticsearch.bat , 添加一句 : SET params='%*' SET J ...

  10. nodejs 换源

    解决npm install安装慢的问题国外镜像会很慢 可用 get命令查看registry npm config get registry 原版结果为 http://registry.npmjs.or ...