bestcoder Round#52 1001(最短路+状压dp)
求从1点出发,走遍所有的点,然后回到1点的最小代价。
每个点可以走若干遍。
如果每个点只能走一遍,那么设dp[i][s]为走完s状态个点(s是状态压缩),现在位于i的最小花费。
然后枚举从哪个点回到原点即可。
但是现在每个点不止走一次,那么状态就不好表示了,但是,我们可以用floyd处理出任意两点的最短距离。
这样子,可以用上面的方式求解了。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <iostream>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <math.h>
using namespace std;
#pragma warning(disable:4996)
#pragma comment(linker, "/STACK:1024000000,1024000000")
typedef __int64 LL;
const int INF = ;
/* */
int dp[][];
int dist[][];
int g[][];
void input(int &x)
{
char ch = getchar();
while (ch<'' || ch>'')ch = getchar();
x = ;
while (ch >= ''&&ch <= '')
{
x = x * + ch - '';
ch = getchar();
}
}
int ans; int main()
{
//freopen("d:/1.in", "r", stdin);
int t, n, m, u, v,dis;
scanf("%d", &t);
while (t--)
{
scanf("%d%d", &n, &m);
for (int i = ; i <= n; ++i)
for (int j = ; j <= n; ++j)
{
g[i][j] = INF;
}
for (int i = ; i < m; ++i)
{
input(u);
input(v);
input(dis);
u--;
v--;
if (g[u][v]>dis)
g[u][v] = g[v][u] = dis;
}
for (int k = ; k < n; ++k)
{
for (int i = ; i < n;++i)
for (int j = ; j < n; ++j)
g[i][j] = min(g[i][j],g[i][k]+ g[k][j]);
} for (int i = ; i <= n; ++i)
for (int s = ; s < ( << n); ++s)
dp[i][s] = INF;
dp[][] = ;
for (int s = ; s < ( << n); ++s)
{
for (int i = ; i < n; ++i)
{
if (s&( << i))
{
for (int j = ; j < n; ++j)
{
if (!(s&( << j)))
{
dp[j][s | ( << j)] = min(dp[j][s | ( << j)], dp[i][s] + g[i][j]);
}
}
}
}
}
if (n == )
{
printf("%d\n", );
continue;
}
int ans = INF;
for (int i = ; i < n; ++i)
{
ans = min(dp[i][( << n) - ] + g[i][], ans);
}
printf("%d\n", ans);
}
return ;
}
bestcoder Round#52 1001(最短路+状压dp)的更多相关文章
- HDU3247 Resource Archiver —— AC自动机 + BFS最短路 + 状压DP
题目链接:https://vjudge.net/problem/HDU-3247 Resource Archiver Time Limit: 20000/10000 MS (Java/Others) ...
- hdu3247Resource Archiver (AC自动机+最短路+状压dp)
Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 100000/100000 K (Java/Others) Total Submis ...
- HDU 4568 Hunter 最短路+状压DP
题意:给一个n*m的格子,格子中有一些数,如果是正整数则为到此格子的花费,如果为-1表示此格子不可到,现在给k个宝藏的地点(k<=13),求一个人从边界外一点进入整个棋盘,然后拿走所有能拿走的宝 ...
- 最短路+状压DP【洛谷P3489】 [POI2009]WIE-Hexer
P3489 [POI2009]WIE-Hexer 大陆上有n个村庄,m条双向道路,p种怪物,k个铁匠,每个铁匠会居住在一个村庄里,你到了那个村庄后可以让他给你打造剑,每个铁匠打造的剑都可以对付一些特定 ...
- 【BZOJ1097】[POI2007]旅游景点atr 最短路+状压DP
[BZOJ1097][POI2007]旅游景点atr Description FGD想从成都去上海旅游.在旅途中他希望经过一些城市并在那里欣赏风景,品尝风味小吃或者做其他的有趣的事情.经过这些城市的顺 ...
- loj6177 「美团 CodeM 初赛 Round B」送外卖2 最短路+状压dp
题目传送门 https://loj.ac/problem/6177 题解 一直不知道允不允许这样的情况:取了第一的任务的货物后前往配送的时候,顺路取了第二个货物. 然后发现如果不可以这样的话,那么原题 ...
- 【CodeVS2800】 送外卖 最短路+状压DP
首先求出各点之间的最短路,floyed即可,注意是0-n. 然后考虑状压,f[i][j]表示状态为i时访问j点时的最短路和,1表示访问,0表示未访问,然后第j个点所在的位置就是(1<<j) ...
- BZOJ 1097: [POI2007]旅游景点atr( 最短路 + 状压dp )
先最短路预处理, 然后状压就行了 -------------------------------------------------------------------------- #include ...
- 2018.11.06 bzoj1097: [POI2007]旅游景点atr(最短路+状压dp)
传送门 预处理出不能在每个点停留之后才停留的点的状态. 对kkk个点都跑一次最短路存下来之后只需要简单状压一下就能过了吐槽原题空间64MB蒟蒻无能为力 然后用fillfillfill赋极大值的时候当m ...
随机推荐
- 微凉大大,教你一步一步在linux中正确的安装Xcache加速php。
首先,强烈吐槽,百度上的教程,都左复制右复制的,乱七八糟,缺东缺西的.借此微凉大大我提供我苦心整理好的教程.以便各位小菜能顺利的使用Xcache加速php,假设看完了,也操作了,还是失败了的话,请联系 ...
- Swift - 歌曲播放样例(附带播放时间和播放进度)
使用MPMoviePlayerController我们可以是进行音乐播放,下面是一个播放器样例.同时,播放时还可以显示播放时间和播放进度. 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
- perl 异步超时 打印错误
#!/usr/bin/perl use AnyEvent; use AnyEvent::HTTP; my $cv = AnyEvent->condvar; sub doit{ my $url = ...
- OCM读书笔记(2) - PL/SQL 基础
1. % type 用法,提取% type所在字段的类型 declare myid dept.deptno % type; myname dept.dname % type;begin ...
- Android和java平台 DES加密解密互通程序及其不能互通的原因
网上的demo一搜一大堆,但是,基本上都是一知半解(包括我).为什么呢?我在尝试分别在两个平台加密的时候,竟然发现Android DES 加密和java DES加密的程序不能互通.就是加密的结果不一样 ...
- uva 10602 Editor Nottoobad(排序)
题目连接:10602 Editor Nottoobad 题目大意:要输入n个单词,现在有三种操作, 1.输入一个字符,需要按下一次按键. 2.通过声控删除一个字符.3.通过声控复制一遍上面的单词.现 ...
- Js实现select联动,option从数据库中读取
待要实现的功能:页面有两个select下拉列表,从第一个select中选择后,在第二个select中出现对应的列表选择,再从第二个select中选择后,在一个text中显示对应的信息.两个select ...
- IP Editor IP控件(对比一下封装IP控件)
HWND hIpEdit; void __fastcall TForm2::FormCreate(TObject *Sender) { hIpEdit = CreateWindow(WC_IPADDR ...
- eclipse设置关联文件打开方式
window->preferences: General->Editors->File Associations
- Unigine 基础入门
1. 首先要搭建好开发环境: 1)Visual Stodio 已经安装了. 2). Microsoft Windows SDK 7.1 (for Windows 7): https://www.mic ...