P1433 吃奶酪(状压dp)
洛谷 / 题目列表 / 题目详情
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)相关推荐
- 【每日一题】洛谷 p1433 吃奶酪 状压dp
- [P1433 吃奶酪](https://www.luogu.com.cn/problem/P1433) 换一种类型,这次求长度最小值,(n<15)接着状压 题目:房间里放着 nn 块奶酪.一 ...
- CSUSTOJ 我爱吃烧烤 (状压dp)
题目链接 大概意思就是Q的体力,n个烧烤店,m个特殊的,要去至少k个. 告诉了我们各个点的到达方案数的情况下,求解恰好Q体力且经过至少K个特殊烧烤店的方案数. 问题分析: n很小,但有50,直接状态压 ...
- 刷题周记(九)——#状压DP:最短Hamilton路径、小国王(互不侵犯)、玉米田(Corn Fields G)、愤怒的小鸟、吃奶酪、炮兵阵地、宝藏 #区间DP:清空字符串#DP:关灯问题II
文章目录 --2020年12月20日(周日)------------------ 状压DP 一.最短Hamilton路径(模板题) 二.玉米田(P1879 [USACO06NOV]Corn Field ...
- CSUST 2007-我爱吃烧烤(状压DP)
题目链接:http://acm.csust.edu.cn/problem/2007 博客园食用链接:https://www.cnblogs.com/lonely-wind-/p/13395416.ht ...
- 【状压DP】吃货JYY(luogu 6085)
正题 luogu 6085 题目大意 给你一个无向图,其中有一些边是必须走的,问你从1开始走,经过所有必须走的边,然后回到1的最短路径 解题思路 n很小,可以先用Floyd跑出两个点之间的最短路 然后 ...
- [蓝桥杯][算法提高VIP]Sharing Chocolate(状压dp记忆化搜索)
题目描述 每天,巧克力在它的许多形式上被全世界数百万人分享.它是一个真正普遍的糖果,实际上在世界上每个国家都能得到. 你发现唯一比吃巧克力更好的事情是把它分享给朋友.不幸的是,你的朋友非常挑剔,有着不 ...
- Codeforces ----- Kefa and Dishes [状压dp]
题目传送门:580D 题目大意:给你n道菜以及每道菜一个权值,k个条件,即第y道菜在第x道后马上吃有z的附加值,求从中取m道菜的最大权值 看到这道题,我们会想到去枚举,但是很显然这是会超时的,再一看数 ...
- 【BZOJ-1097】旅游景点atr SPFA + 状压DP
1097: [POI2007]旅游景点atr Time Limit: 30 Sec Memory Limit: 357 MB Submit: 1531 Solved: 352 [Submit][S ...
- 洛谷P1433 吃奶酪--Java解法(货郎担问题)
洛谷P1433 吃奶酪–Java解法(货郎担问题) 题目链接 解决思想 本题目是一个典型的货郎担问题,即从(0,0)点出发,所有点仅经过依次(我们可以用反证法证明如果有一个点经过两次其路径一定比每个点 ...
最新文章
- java sql sum函数的使用方法_SQL常用汇总函数用法说明
- Linux网络配置命令
- java高并发(四)并发编程与线程安全
- openresty完全开发指南_FDA拟修订群体药代动力学指南:医药商需要了解些什么?...
- 【BZOJ1188】分裂游戏(博弈论)
- 在资源管理器中使鼠标右键增加一个命令,运行cmd,同时使得当前路径为资源管理器当前的目录...
- 源码编译安装Netron模型可视化工具
- 视觉SLAM十四讲中P61作业7。
- Rasa原文--训练NLU数据
- 理解不够,还是不够专业?程序员与架构师之间的联系
- 【配准】2020年“基于深度学习的医学影像配准”期刊论文速览(PR,TMI,MIA)
- paired-end reads的拼接
- C++中vector容器和普通数组的区别
- CSDN博客论坛——读好书,畅想“我的IT成长路”活动【已完成】
- 【小白向】简单随意DIY你的U盘图标
- 2022-2028全球与中国移动网页浏览器市场现状及未来发展趋势
- 论文阅读:《A Wavenet For Speech Denoising》
- 计算机网络-因特网概述
- php连接sqlserver数据库服务器(或者称mssql数据库)的几种方法
- 去哪儿2017校园招聘笔试题——获得文件扩展名filename extension
热门文章
- php 能处理死循环吗,详解PHP死循环写法和作用
- 实用脚本!Python 提取 PDF 指定内容生成新文件!
- GUI实战|Python做一个文档图片提取软件
- 富学金融穷学IT,分析互联网的新财富密码
- 为了追到小姐姐,我用 Python 制作了一个机器人
- 深度学习框架对决篇:Keras VS PyTorch
- 电子琴节奏包制作_济南这个藏在菜市场的小饺子馆,纯手工制作,老板娘一个人不停忙...
- 评估应用使用oracle磁盘空间,Oracle磁盘空间使用统计
- jQuery实现图片延迟加载
- Codeforce 1182B Plus from Picture