Hdu dp
4856 这题说的是给了一个图 这个图有很多的隧道每个隧道是单向的 只能从一个入口进入从另一个入口出来 要求计算出走完这些隧道花的总时间 因为这个图是一个网格行的然后 先用bfs算出隧道的出口到每个隧道的入口的最短距离然后进行一次TSP 意思是 dp[S][v] 表 示 从 点 v 出发已经经过了 S中每个二进制表示的点然后求得了结果
#include <iostream>
#include <string.h>
#include <cstdio>
#include <queue>
using namespace std;
typedef pair<int,int> F;
const int maxn =;
struct node{
int fx,fy,tx,ty;
}P[maxn];
int x[]={,,,-};
int y[]={,-,,};
char map[maxn][maxn];
int MT[maxn][maxn],N,M,dist[maxn][maxn];
int dp[<<][];
void bfs(int xx,int yy){
memset(MT,-,sizeof(MT));
queue<F> Q;
F a;
a.first =xx;
a.second=yy;
Q.push(a);
MT[xx][yy]=;
while(!Q.empty()){
F E=Q.front();
Q.pop();
for(int i =;i<; ++ i){
int xt=E.first+x[i];
int yt=E.second+y[i];
if( xt> && xt <= N && yt > && yt <= N && MT[xt][yt]==-&&map[xt][yt]=='.')
{
MT[xt][yt]= MT[E.first][E.second] + ;
a.first =xt;
a.second =yt;
Q.push(a);
}
}
}
}
void solve(){
for(int i = ; i<M ; ++i){
bfs( P[i].tx, P[i].ty);
for(int j = ; j<M ; ++ j)
if(i!=j)
dist[i][j]=MT[ P[j].fx ][ P[j].fy ];
else dist[i][j]=;
dist[i][]=dist[][i]=;
}
}
int main()
{
while(scanf("%d%d",&N,&M)==){
memset(dist,-,sizeof(dist));
for(int i =; i<= N; ++i){
getchar();
for(int j =; j<=N; ++j)
map[i][j] =getchar();
}
M++;
for(int i =; i<M ;++i)
scanf("%d%d%d%d",&P[i].fx,&P[i].fy,&P[i].tx,&P[i].ty);
solve();
for(int S =; S<(<<M); ++S)
fill(dp[S],dp[S]+M,);
dp[(<<M)-][]=;
for(int S=(<<M)- ; S>=; S--){
for(int v=; v<M; ++v)
for(int u=; u<M; ++u){
if((S&(<<u))==&&dist[u][v]!=-&& dp[S|<<u][u]!=){
dp[S][v] =min(dp[S][v],dp[S|<<u][u]+dist[u][v]);
}
}
}
if(dp[][]!=)
printf("%d\n",dp[][]);
else printf("-1\n");
}
return ;
}
Hdu dp的更多相关文章
- HDU 1171 Big Event in HDU dp背包
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s ...
- hdu dp 1257 最小拦截系统
最少拦截系统 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- HDU dp递推 母牛的故事 *
母牛的故事 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- 概率dp的迭代方式小结——zoj3329,hdu4089,hdu4035
在推导期望方程时我们常常会遇到dp[i]和其他项有关联,那么这时候我们就难以按某个顺序进行递推 即难以通过已经确定的项来求出新的项 即未知数的相互关系是循环的 但是我们又可以确定和dp[i]相关联的项 ...
- 【DP】HDU 1260
HDU 1260 Tickets 题意:有N个人要买票,你可以一个一个人卖票,时间分别为Xs,也可以相邻两个人一起卖票,时间为Ys,从早上八点开始卖票,问你何时最早将N个人的票卖完. 思路:解决情况是 ...
- HDU 2227 Find the nondecreasing subsequences (DP+树状数组+离散化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2227 Find the nondecreasing subsequences ...
- hdu 3401 单调队列优化DP
Trade Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- HDU 2376 树形dp|树上任意两点距离和的平均值
原题:http://acm.hdu.edu.cn/showproblem.php?pid=2376 经典问题,求的是树上任意两点和的平均值. 这里我们不能枚举点,这样n^2的复杂度.我们可以枚举每一条 ...
- HDU 4113 Construct the Great Wall(插头dp)
好久没做插头dp的样子,一开始以为这题是插头,状压,插头,状压,插头,状压,插头,状压,无限对又错. 昨天看到的这题. 百度之后发现没有人发题解,hust也没,hdu也没discuss...在acm- ...
随机推荐
- locate命令的使用
使用locate命令,遇到了这样的情况:当前目录下有一个文件,而使用这个命令时却查找不到这个文件,上网查了一下,找到了原因,就在下面. 1. find find是最常见和最强大的查找命令,你可以用它找 ...
- dhroid - Perference
SharedPreferences 是我们开发android使用很多的工具通常我们是这样使用的 SharedPreferences share=getSharedPreferences("n ...
- Ajax做列表无限加载和Ajax做二级下拉选项
//栏目Ajax做加载 public function ajaxlist(){ //echo "http://www.域名.com/index.php?a=Index&c=Index ...
- flask request模块
原文链接: https://blog.csdn.net/u012163234/article/details/53116652 前言 在进行Flask开发中,前端需要发送不同的请求及各种带参数的 ...
- HOJ 2133&POJ 2964 Tourist(动态规划)
Tourist Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1503 Accepted: 617 Description A ...
- OpenCV学习笔记之CXCORE篇
转自blog.csdn.net/bbzz2/article/details/50764209
- PyQT5-QPushButton切换按钮
""" QPushButton:切换按钮就是QPsuhButton的一种特殊模式,他有两种状态:按下和未按下.我们在点击的时候切换两种状态,有很多场景会用到这个功能 Au ...
- snowflake and uuid
分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的. 有些时候我们希望能使用一种简单一 ...
- Django实现电影论坛
主要实现功能: 注册,登陆,发帖,评论帖子,xadmin实现后台提供帖子管理,板块管理等等 首页(搜索,筛选) 发布帖子 帖子详情页(显示帖子具体内容,提供评论) 个人信息页面(显示个人信息,修改个人 ...
- 坐标转换convertRect
// 目标view的直接父viwe 目标view 要转换到的view [self.backgr ...