洛谷 P1433 吃奶酪 状压DP
题目描述


分析
比较简单的状压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的更多相关文章
- 洛谷P3959 宝藏(状压dp)
传送门 为什么感觉状压dp都好玄学……FlashHu大佬太强啦…… 设$f_{i,j}$表示当前选的点集为$i$,下一次要加入的点集为$j$时,新加入的点和原有的点之间的最小边权.具体的转移可以枚举$ ...
- 洛谷 P3112 后卫马克 —— 状压DP
题目:https://www.luogu.org/problemnew/show/P3112 状压DP...转移不错. 代码如下: #include<iostream> #include& ...
- 【洛谷4941】War2 状压Dp
简单的状压DP,和NOIP2017 Day2 找宝藏 代码几乎一样.(比那个稍微简单一点) f[i][j] ,i代表点的状态,j是当前选择的点,枚举上一个选到的点k 然后从f[i-(1<< ...
- 洛谷 3959 宝藏——枚举+状压dp
题目:https://www.luogu.org/problemnew/show/P3959 原来写了个不枚举起点的状压dp. #include<iostream> #include< ...
- 洛谷$P3959\ [NOIp2017]$ 宝藏 状压$dp$
正解:状压$dp$ 解题报告: 传送门$QwQ$ $8102$年的时候就想搞这题了,,,$9102$了$gql$终于开始做这题了$kk$ 发现有意义的状态只有当前选的点集和深度,所以设$f_{i,j} ...
- 洛谷P2473奖励关——状压DP
题目:https://www.luogu.org/problemnew/show/P2473 还是对DP套路不熟悉... 像这种前面影响后面,而后面不影响前面的问题就应该考虑倒序递推: 看n只有15那 ...
- 2018.11.02 洛谷P2831 愤怒的小鸟(状压dp)
传送门 状压一眼题. 直接f[i]f[i]f[i]表示未选择状态为iii时的最小次数. 然后考虑现在怎么转移. 显然可以直接枚举消掉某一个点或者某两个点,复杂度O(n22n)O(n^22^n)O(n2 ...
- 洛谷P1433 吃奶酪 题解 状态压缩DP
题目链接:https://www.luogu.com.cn/problem/P1433 题目大意 房间里放着 \(n\) 块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在 \((0, ...
- 洛谷 P1433 吃奶酪【DFS】+剪枝
题目链接:https://www.luogu.org/problemnew/show/P1433 题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处 ...
随机推荐
- Tidyverse| XX_join :多个数据表(文件)之间的各种连接
本文首发于公众号:“生信补给站” Tidyverse| XX_join :多个数据表(文件)之间的各种连接 前面分享了单个文件中的select列,filter行,列拆分等,实际中经常是多个数据表,综合 ...
- java正则匹配 指定内容以外的 内容
今天,遇到一个需要 匹配出 指定内容以外的 内容的需求. 乍一看,需求貌视很简单啊,直接上 非贪婪模式的 双向零宽断言(有的资料上也叫 预搜索.预查.环视lookaround): 比如,我要匹配 串内 ...
- 内核与驱动文件的version magic匹配问题
https://blog.csdn.net/yubing_615/article/details/52183185 1.问题:本地编译的一整套底层代码down到设备跑都正常,但是由这套代码上传SVN服 ...
- 使用PyQtGraph绘制数据滚动图形(4)
app = pg.QtGui.QApplication([]) win = pg.GraphicsWindow(title="数据滚动") win.resize(600,300) ...
- Eureka加了secsecurity后注册失败
报错信息: com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known ...
- Divisors (求解组合数因子个数)【唯一分解定理】
Divisors 题目链接(点击) Your task in this problem is to determine the number of divisors of Cnk. Just for ...
- Dorado开发——树形下拉框
最近在学习Dorado开发的过程中,遇到了一个问题,Dorado的树形下拉框选择:Dorado默认情况下父节点和子节点都是可选的,而我要实现的是父节点不可选. 解决办法:在下拉框中,判断父子节点,点击 ...
- Shell总结02-shell变量、赋值与替换
变量 shell并不区分变量的类型,或者说变量都是弱类型的,本质上都是字符串,但是如果变量值中只含有数字,shell还是支持对其进行算术运算 赋值 常见的赋值操作符有=(在其前后没有空白符)和let ...
- CocosCreator实现微信排行榜
1. 概述 不管是在现实生活还是当今游戏中,各式各样的排名层出不穷.如果我们做好一款游戏,却没有实现排行榜,一定是不完美的.排行榜不仅是玩家了解自己实力的途径,也是游戏运营刺激用户留存的一种途径.在微 ...
- 利用VS自带发布功能实现web项目快速部署
你还在使用最原始的方法部署服务器吗?还在把项目文件全部复制然后黏贴到服务器上?这种方法太low而且又慢又不安全(存在源码泄露等安全性问题),如果你是这样,那你自己肯定也为此烦恼不已. 下面我所要讲到的 ...