洛谷 P1336 吃奶酪(状压DP)
时间:2021-09-05
本文章向大家介绍洛谷 P1336 吃奶酪(状压DP),主要包括洛谷 P1336 吃奶酪(状压DP)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
P1336 吃奶酪
题意
房间中放有n块奶酪。一只小老鼠(位于[0, 0])要把它们都吃掉,问最少要跑多少距离。
输入
第一行一个整数,表示奶酪数量 \(n\) 。
第 \(2\) 行到第 \((n \ + \ 1)\) 行,每行两个实数 \(x \ , \ y\) ,第 \((i \ + \ 1)\) 行表示第 \(i\) 块奶酪的位置 \([x, \ y]\)。
输出
4
1 1
1 -1
-1 1
-1 -1
7.41
题目分析
状态压缩, \(f(i, \ s)\) 表示从i点开始,走完s集合中所有点的最短路径。最后再加上从初始点到 \(i\) 点的距离即可。
Code
#include <bits/stdc++.h>
using namespace std;
const int N = 16;
int n;
double x[N], y[N], dis[N][N];
double f[N][1 << N]; // f(i, s) 从i出发到达s集合所有点的最小距离
void get_dis ()
{
for (int i = 0; i <= n; i ++ )
for (int j = 0; j <= n; j ++ )
dis[i][j] = sqrt((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]));
}
void solve ()
{
cin >> n;
for(int i = 1; i <= n; i ++ ) cin >> x[i] >> y[i];
get_dis();
for (int i = 0; i <= n; i ++ )
for (int j = 0; j < (1 << n); j ++ )
f[i][j] = 1e18;
// s 集合的所有状态
for (int s = 0; s < (1 << n); s ++ )
// 从i开始到达集合其他点
for (int i = 1; i <= n; i ++ )
{
if ((s & (1 << i-1)) == 0) continue; // s中没有i
if (s == (1 << i-1)) { f[i][s] = 0; continue; } // *** s 中只有一个i点
for (int j = 1; j <= n; j ++ )
{
if ((s && (1 << j-1)) == 0) continue; // s 中没有j点
// 转移状态,先从i到达j,然后从j到达其他点
f[i][s] = min(f[i][s], f[j][s - (1 << i-1)] + dis[i][j]);
}
}
double ans = -1;
for (int i = 1; i <= n; i ++ )
{
double t = f[i][(1 << n) - 1] + dis[i][0]; // 从初始点到i点,再到达其他所有点
if (ans == -1 || ans > t) ans = t;
}
cout.precision(2);
cout << fixed << ans << endl;
}
signed main ()
{
solve();
return 0;
}
原文地址:https://www.cnblogs.com/Eval-little/p/15228814.html
- windows2012服务器搭建mongodb并设置远程访问
- 腾讯地图开放H5定位API,率先支持iOS10
- 写让别人能读懂的代码
- 安装serverstatus监控多台服务器状态
- Windows2012搭建我的世界(Minecraft)服务器超简单
- 高效程序员的MacBook工作环境配置
- vsftpd搭建自己的ftp服务器
- Linux一键安装Transmission电影下载到服务器
- centos安装ab工具给网站进行压力测试
- ubuntu16.04安装mongodb教程
- linux压缩解压命令使用
- linux使用wc命令查看文件行数、字母、字节数命令
- 程序员偷偷深爱的 9 个不良编程习惯
- 低级程序员和高级程序员的区别
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 基于docker部署skywalking实现全链路监控
- 数据结构与算法(二)——十大排序算法
- VUE项目使用.env文件配置全局环境变量
- 设计模式学习(六)-抽象工厂模式
- 彻底完美解决安卓苹果手机点击输入框网页页面自动放大缩小
- 第22天:NLP实战(六)——基于PaddleHub的疫情期间网民情绪识别
- Echarts大数据可视化物流航向省份流向迁徙动态图,开发全解+完美参数注释
- Linux 常用操作以及概念
- GCD梳理与总结——封装
- 原生JS在网页上复制的所有文字后面自动加上一段版权声明
- 使用宝塔docker安装为知笔记私有部署
- 第4天:美团点评2020校招测试方向笔试试卷分析
- Element-UI饿了么时间组件控件按月份周日期,开始时间结束时间范围限制参数
- 微信小程序flex布局
- 细数 TS 中那些奇怪的符号