[状压DP]吃奶酪
吃
奶
酪
吃奶酪
吃奶酪
题目描述
房间里放着
n
n
n 块奶酪。一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在
(
0
,
0
)
(0,0)
(0,0)点处。
输入
第一行有一个整数,表示奶酪的数量
n
n
n。
第 22 到第
(
n
+
1
)
(n+1)
(n+1) 行,每行两个实数,第
(
i
+
1
)
(i + 1)
(i+1) 行的实数分别表示第 i 块奶酪的横纵坐
x
i
,
y
i
x_i,y_i
xi,yi
输出
输出一行一个实数,表示要跑的最少距离,保留
2
2
2 位小数。
样例输入
4
1 1
1 -1
-1 1
-1 -1
样例输出
7.41
题目解析
这道题我们可以用状压DP做。对于,每两个点之间的距离,我们可以用欧氏距离来计算
对于两个点
(
x
1
,
y
1
)
(
x
2
,
y
2
)
(x_1,y_1) (x_2,y_2)
(x1,y1)(x2,y2)两点之间的距离公式为
s
q
r
t
(
(
x
1
−
x
2
)
∗
(
x
1
−
x
2
)
+
(
y
1
−
y
2
)
∗
(
y
1
−
y
2
)
)
sqrt ( (x_1-x_2) * (x_1-x_2) + (y_1-y_2) * (y_1-y_2) )
sqrt((x1−x2)∗(x1−x2)+(y1−y2)∗(y1−y2))
code
#include<cmath>
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#define db double
using namespace std;
int n;
db ans=-1,x[20], y[20], f[20][35000];
db jl (db x1, db y1, db x2, db y2)
{
return sqrt ((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int main ()
{
scanf ("%d",&n);
memset(f,127,sizeof(f));
for (int i=1; i<=n; ++i) scanf("%lf%lf",&x[i],&y[i]);
for(int s=1;s<=(1<<n)-1;s++)
for(int i=1;i<=n;i++)
{
if((s&(1<<(i-1)))==0) continue;
if(s==(1<<(i-1))) {f[i][s]=0;continue;}
for(int j=1;j<=n;j++)
{
if((s&(1<<(j-1)))==0||i==j) continue;
f[i][s]=min(f[i][s],f[j][s-(1<<(i-1))]+jl(x[i],y[i],x[j],y[j]));
}
}
for(int i=1;i<=n;i++)
{
db s=f[i][(1<<n)-1]+jl(x[i],y[i],x[0],y[0]);
if(ans==-1||ans>s) ans=s;
}
printf("%.2lf\n",ans);
return 0;
}
[状压DP]吃奶酪的更多相关文章
- P1433 吃奶酪(洛谷)状压dp解法
嗯?这题竟然是个绿题. 这个题真的不(很)难,我们只是不会计算2点之间的距离,他还给出了公式,这个就有点…… 我们直接套公式去求出需要的值,然后普通的状压dp就可以了. 是的状压dp. 这个题的数据加 ...
- 洛谷 P1433 吃奶酪 状压DP
题目描述 分析 比较简单的状压DP 我们设\(f[i][j]\)为当前的状态为\(i\)且当前所在的位置为\(j\)时走过的最小距离 因为老鼠的坐标为\((0,0)\),所以我们要预处理出\(f[1& ...
- hihocoder #1608 : Jerry的奶酪(状压dp)
题目链接:http://hihocoder.com/problemset/problem/1608 题解:就是一道简单的状压dp由于dfs过程中只需要几个点之间的转移所以只要预处理一下几个点就行. # ...
- 状压DP之LGTB 与序列
题目 思路 这道题竟然是状压DP,本人以为是数论,看都没看就去打下一题的暴力了,哭 \(A_i\)<=30,所以我们只需要考虑1-58个数,再往后选的话还不如选1更优,注意,1是可以重复选取的, ...
- 状压dp大总结1 [洛谷]
前言 状态压缩是一种\(dp\)里的暴力,但是非常优秀,状态的转移,方程的转移和定义都是状压\(dp\)的难点,本人在次总结状压dp的几个题型和例题,便于自己以后理解分析状态和定义方式 状态压缩动态规 ...
- 状压DP复习笔记
前言 复习笔记第4篇.CSP RP++. 引用部分为总结性内容. 0--P1433 吃奶酪 题目链接 luogu 题意 房间里放着 \(n\) 块奶酪,要把它们都吃掉,问至少要跑多少距离?一开始在 \ ...
- 有关状压DP
[以下内容仅为本人在学习中的所感所想,本人水平有限目前尚处学习阶段,如有错误及不妥之处还请各位大佬指正,请谅解,谢谢!] 引言 动态规划虽然已经是对暴力算法的优化,但在某些比较特别的情况下,可以通过一 ...
- 【BZOJ-1097】旅游景点atr SPFA + 状压DP
1097: [POI2007]旅游景点atr Time Limit: 30 Sec Memory Limit: 357 MBSubmit: 1531 Solved: 352[Submit][Sta ...
- 【62测试】【状压dp】【dfs序】【线段树】
第一题: 给出一个长度不超过100只包含'B'和'R'的字符串,将其无限重复下去. 比如,BBRB则会形成 BBRBBBRBBBRB 现在给出一个区间[l,r]询问该区间内有多少个字符'B'(区间下标 ...
随机推荐
- Node.js & process.env & OS Platform checker
Node.js & process.env & OS Platform checker Window 10 Windows 7 ia32 CentOS $ node # process ...
- serverless & front end
serverless & front end Cloud Functions or Functions as a Service (FaaS) https://serverless.css-t ...
- V8 & ECMAScript & ES-Next
V8 & ECMAScript & ES-Next ES6, ES7, ES8, ES9, ES10, ES11, ES2015, ES2016, ES2017, ES2018, ES ...
- NGK公链依靠技术创新推动数字经济产业发展
数字经济更让人们的生活发生了翻天覆地的变化.数字经济的发展要依靠技术的创新,发展出生态新模式.同时数字经济的发展要利用新技术对传统产业进行全面的的改造升级,释放数字对经济发展的放大.倍增作用.打造数字 ...
- Redis-第九章节-动态字符串
目录 概述 SDS(动态字符串) SDS(动态字符串)与c语言字符串的区别 1.概述 String类型底层实现的简单动态字符串sds,是可以修改的字符串.它采用预分配冗余空间的方式来减少内存的频繁分配 ...
- 新手不能忽视的MFC编程之CString
首发文章 | 公众号:lunvey 作为一个新手,刚接触C++没多久.赶鸭子上架完成项目,鉴于之前有几年编程基础,所以很快就接触到了界面开发,由于用的是VC++6.0,所以自然而然就将MFC作为图形界 ...
- java基础第11期——Stream流、方法引用、junit单元测试
1.Stream流 Stream流与io流是不同的东西,用于解决集合类库已有的弊端, 1.1 获取Stream流: Collection集合的Stream方法,注意Map集合要经过转化 default ...
- springboot框架里的pom.xml文件里的m不显示,只有标红和<>符号的解决方法
这是因为没有把pom.xml文件加入到maven工程中,所以需要如图所示 亲测有效,原文链接:https://blog.csdn.net/qq_41026946/article/details/107 ...
- JUnit5学习之六:参数化测试(Parameterized Tests)基础
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 死磕hyperledger fabric源码|Order节点概述
死磕hyperledger fabric源码|Order节点概述 文章及代码:https://github.com/blockchainGuide/ 分支:v1.1.0 前言及源码目录 Orderer ...