洛谷 / 题目列表 / 题目详情
P1433 吃奶酪
提交
23.28k
通过
9.30k
时间限制
1.00s
内存限制
125.00MB
题目描述
房间里放着n块奶酪。一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处。

输入格式
第一行一个数n (n<=15)

接下来每行2个实数,表示第i块奶酪的坐标。

两点之间的距离公式=sqrt((x1-x2)(x1-x2)+(y1-y2)(y1-y2))

输出格式
一个数,表示要跑的最少距离,保留2位小数。

输入输出样例
输入 #1 复制

4
1 1
1 -1
-1 1
-1 -1

输出 #1 复制

7.41

···
/*
预处理一下各个点之间的距离,
暴搜可以过
但是!!
这是经典的NP问题,
数据比较小,用状压dp,d它!!!!

*/
第一种写法:
虚拟一个终点(原来的终点到它的距离为0,
记的起点(0,0)到其他点的距离要算上),
就相当于前几天写的:最短Hamilton路径(状压dp)

#include <bits/stdc++.h>
using namespace std;
const int N = 1<<20;
double dp[N][20];
struct Point
{double x,y;
} p[20];
double getDis(int i,int j)
{return sqrt(pow(p[i].x-p[j].x,2)+pow(p[i].y-p[j].y,2));
}
double dis[20][20];
int n;
void init()
{for(int i = 0; i <= n; i++){for(int j = i; j <= n; j++){dis[i][j] = dis[j][i] = getDis(i,j);}}int t = n+2;for(int i = 0; i < (1<<t); i++){for(int j = 0; j < t; j++){dp[i][j] = 1e16;}}dp[1][0] = 0;
}
int main()
{cin>>n;p[0].x = p[0].y = 0;for(int i = 1; i <= n; i++){cin>>p[i].x>>p[i].y;}init();n = n+2;//原来起点(0,0),还有虚拟了一个(原来所有终点的)终点for(int i = 1; i < (1<<n); i++){for(int j = 0; j < n; j++){if((i>>j)&1)for(int k = 0; k < n; k++){dp[i][j] = min(dp[i][j],dp[i-(1<<j)][k]+dis[k][j]);}}}cout.precision(2);cout<<fixed<<dp[(1<<n)-1][n-1]<<endl;return 0;
}

为了更深入了解状压dp,
第二种写法,不虚拟终点,
最终对所有终点的求个最小值
(时间,空间复杂度都更优)

#include <bits/stdc++.h>
using namespace std;
const int N = 1<<17;
double dp[N][17];
struct Point
{double x,y;
} p[17];
double getDis(int i,int j)
{return sqrt(pow(p[i].x-p[j].x,2)+pow(p[i].y-p[j].y,2));
}
double dis[17][17];
int n;
void init()
{for(int i = 0; i <= n; i++){for(int j = i; j <= n; j++){dis[i][j] = dis[j][i] = getDis(i,j);}}int t = n+1;for(int i = 0; i < (1<<t); i++){for(int j = 0; j < t; j++){dp[i][j] = 1e16;}}dp[1][0] = 0;
}
int main()
{cin>>n;if(!n){cout<<"0.00"<<endl;return 0;}p[0].x = p[0].y = 0;for(int i = 1; i <= n; i++){cin>>p[i].x>>p[i].y;}init();n = n+1;for(int i = 1; i < (1<<n); i++){for(int j = 1; j < n; j++){if((i>>j)&1)for(int k = 0; k < n; k++){dp[i][j] = min(dp[i][j],dp[i-(1<<j)][k]+dis[k][j]);}}}double ans = 1e16;for(int i = 1; i < n; i++)ans = min(ans,dp[(1<<n)-1][i]);cout.precision(2);cout<<fixed<<ans<<endl;return 0;
}

P1433 吃奶酪(状压dp)相关推荐

  1. 【每日一题】洛谷 p1433 吃奶酪 状压dp

    - [P1433 吃奶酪](https://www.luogu.com.cn/problem/P1433) 换一种类型,这次求长度最小值,(n<15)接着状压 题目:房间里放着 nn 块奶酪.一 ...

  2. CSUSTOJ 我爱吃烧烤 (状压dp)

    题目链接 大概意思就是Q的体力,n个烧烤店,m个特殊的,要去至少k个. 告诉了我们各个点的到达方案数的情况下,求解恰好Q体力且经过至少K个特殊烧烤店的方案数. 问题分析: n很小,但有50,直接状态压 ...

  3. 刷题周记(九)——#状压DP:最短Hamilton路径、小国王(互不侵犯)、玉米田(Corn Fields G)、愤怒的小鸟、吃奶酪、炮兵阵地、宝藏 #区间DP:清空字符串#DP:关灯问题II

    文章目录 --2020年12月20日(周日)------------------ 状压DP 一.最短Hamilton路径(模板题) 二.玉米田(P1879 [USACO06NOV]Corn Field ...

  4. CSUST 2007-我爱吃烧烤(状压DP)

    题目链接:http://acm.csust.edu.cn/problem/2007 博客园食用链接:https://www.cnblogs.com/lonely-wind-/p/13395416.ht ...

  5. 【状压DP】吃货JYY(luogu 6085)

    正题 luogu 6085 题目大意 给你一个无向图,其中有一些边是必须走的,问你从1开始走,经过所有必须走的边,然后回到1的最短路径 解题思路 n很小,可以先用Floyd跑出两个点之间的最短路 然后 ...

  6. [蓝桥杯][算法提高VIP]Sharing Chocolate(状压dp记忆化搜索)

    题目描述 每天,巧克力在它的许多形式上被全世界数百万人分享.它是一个真正普遍的糖果,实际上在世界上每个国家都能得到. 你发现唯一比吃巧克力更好的事情是把它分享给朋友.不幸的是,你的朋友非常挑剔,有着不 ...

  7. Codeforces ----- Kefa and Dishes [状压dp]

    题目传送门:580D 题目大意:给你n道菜以及每道菜一个权值,k个条件,即第y道菜在第x道后马上吃有z的附加值,求从中取m道菜的最大权值 看到这道题,我们会想到去枚举,但是很显然这是会超时的,再一看数 ...

  8. 【BZOJ-1097】旅游景点atr SPFA + 状压DP

    1097: [POI2007]旅游景点atr Time Limit: 30 Sec  Memory Limit: 357 MB Submit: 1531  Solved: 352 [Submit][S ...

  9. 洛谷P1433 吃奶酪--Java解法(货郎担问题)

    洛谷P1433 吃奶酪–Java解法(货郎担问题) 题目链接 解决思想 本题目是一个典型的货郎担问题,即从(0,0)点出发,所有点仅经过依次(我们可以用反证法证明如果有一个点经过两次其路径一定比每个点 ...

最新文章

  1. java sql sum函数的使用方法_SQL常用汇总函数用法说明
  2. Linux网络配置命令
  3. java高并发(四)并发编程与线程安全
  4. openresty完全开发指南_FDA拟修订群体药代动力学指南:医药商需要了解些什么?...
  5. 【BZOJ1188】分裂游戏(博弈论)
  6. 在资源管理器中使鼠标右键增加一个命令,运行cmd,同时使得当前路径为资源管理器当前的目录...
  7. 源码编译安装Netron模型可视化工具
  8. 视觉SLAM十四讲中P61作业7。
  9. Rasa原文--训练NLU数据
  10. 理解不够,还是不够专业?程序员与架构师之间的联系
  11. 【配准】2020年“基于深度学习的医学影像配准”期刊论文速览(PR,TMI,MIA)
  12. paired-end reads的拼接
  13. C++中vector容器和普通数组的区别
  14. CSDN博客论坛——读好书,畅想“我的IT成长路”活动【已完成】
  15. 【小白向】简单随意DIY你的U盘图标
  16. 2022-2028全球与中国移动网页浏览器市场现状及未来发展趋势
  17. 论文阅读:《A Wavenet For Speech Denoising》
  18. 计算机网络-因特网概述
  19. php连接sqlserver数据库服务器(或者称mssql数据库)的几种方法
  20. 去哪儿2017校园招聘笔试题——获得文件扩展名filename extension

热门文章

  1. php 能处理死循环吗,详解PHP死循环写法和作用
  2. 实用脚本!Python 提取 PDF 指定内容生成新文件!
  3. GUI实战|Python做一个文档图片提取软件
  4. 富学金融穷学IT,分析互联网的新财富密码
  5. 为了追到小姐姐,我用 Python 制作了一个机器人
  6. 深度学习框架对决篇:Keras VS PyTorch
  7. 电子琴节奏包制作_济南这个藏在菜市场的小饺子馆,纯手工制作,老板娘一个人不停忙...
  8. 评估应用使用oracle磁盘空间,Oracle磁盘空间使用统计
  9. jQuery实现图片延迟加载
  10. Codeforce 1182B Plus from Picture