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- ...
随机推荐
- VC/MFC程序开启关闭和打开自己或其他软件,更改窗口类
一. 关闭自身软件 直接在需要关闭的位置输入 HANDLE hself = GetCurrentProcess(); TerminateProcess(hself, 0); 二.关闭其他软件 流程: ...
- Tomcat应用的部署记录
1.先安装jdk,解压jdk-7u17-linux-x64.tar.gz至/opt目录.配置环境变量,在/etc/profile末加入如下内容. JAVA_HOME=/opt/jdk1..0_17 e ...
- 使用atomic一定是线程安全的吗?
这个问题很少遇到,但是答案当然不是.atomic在set方法里加了锁,防止了多线程一直去写这个property,造成难以预计的数值.但这也只是读写的锁定.跟线程安全其实还是差一些.看下面. @inte ...
- Git - Pull Request工作流
Pull Requests是Bitbucket上方便开发者之间协作的功能.提供了一个用户友好的Web界面,在集成提交的变更到正式项目前可以对变更进行讨论. 开发者向团队成员通知功能开发已经完成,Pul ...
- backBone.js初识
一.单页面应用 1.单页面应用(single-page application :SPA),是指在浏览器中运行的应用,在使用期间不会重新加载页面. 2.它所有的活动局限于一个Web页面,仅在初始化加载 ...
- tomcat内存溢出:PermGen space解决方法
最近集群服务器中的几台服务器在半夜自动重启tomcat后一段时间便都会报java.lang.OutOfMemoryError: PermGen space. 习惯性的百度,得到的答案基本上都是统一的解 ...
- react封装简单的浏览器顶部加载进度条全局组件
在项目中经常会有在请求前后加loading或者加加载进度条,一般这些组件都会抽离出来作为全局组件 进度条的插件貌似都不是很符合自己项目中的需求,于是.. 参考nprogress样式,自己在项目中封装组 ...
- 2018-2019-2 20165330《网络对抗技术》Exp2 后门原理与实践
目录 基础问题 相关知识 实验内容 实验步骤 实验过程中遇到的问题 实验总结与体会 实验内容 使用netcat获取主机操作Shell,cron启动 使用socat获取主机操作Shell, 任务计划启动 ...
- Oracle SQL之 序列使用限制
Restrictions on Sequence Values You cannot use CURRVAL and NEXTVAL in thefollowing constructs:■ A su ...
- Count the Colors---zoj1610线段树
题目链接 题意: 求每种颜色有几段线段: 模拟数组: #include<stdio.h> #include<iostream> #include<algorithm> ...