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- ...
随机推荐
- 关于Nagios通过NRPE监控客户端的安装与配置
环境介绍>>>>>>>>>>>>>>>>>>>>>>>> ...
- java.lang.instrument 中的premain 实现类的个性化加载(附源代码)
背景 想调用ASM API (用于字节码处理的开源API)对字节码进行处理,目标是实现对java程序运行时各种对象的动态跟踪,并进一步分析各个对象之间的关系(研究前提是目前的UML锁阐释的whole- ...
- [APP] Android 开发笔记 004-Android常用基本控件使用说明
TextView 文本框 EditText控件 Button 与 ImageButton ImageView RadioButton CheckBox复选框 TextView 文本框 ,用于显示文本的 ...
- Swift - 判断应用是否是第一次启动(或当前版本是否第一次启动)
1 实现原理 (1)我们会发现许多 App 在一次启动时会显示一个新手引导页(下次启动就不会再显示) (2)其判断原理就是在 AppDelegate 里的 didFinishLaunchingWi ...
- Linux 常用命令标记
1.linux 服务器之间拷贝文件 scp 本地用户名@IP地址:文件名1 远程用户名@IP地址:文件名2 该命令可以变型为目的服务器204上输入如下命令:红色部分是需要接受目的地,-r是递归复制该文 ...
- jQuery ajax的前台代码编写
jQuery ajax的前台代码: <script type="text/javascript" src="/include/jquery/jquery-1.1.3 ...
- java中String与StringBuilder的区别
相信大家对 String 和 StringBuffer 的区别也已经很了解了,但是估计还是会有很多同志对这两个类的工作原理有些不清楚的地方,今天我在这里重新把这个概念给大家复习一下,顺便牵出 J2SE ...
- hdu3974 Assign the task【线段树】
There is a company that has N employees(numbered from 1 to N),every employee in the company has a im ...
- ubuntu下opencv2.4.9和opencv3.1.0的共存
转载:ubuntu下opencv2.4.9和opencv3.1.0的共存 关于opencv3.1.0和opencv2.4.9的共存问题其实并不是什么大的问题,因此网上资料比较少.本人也是因为在安装Ro ...
- 《机器学习实战》2.2.2分析数据:使用matplotlib创建散点图
#输出散点图 def f(): datingDataMat,datingLabels = file2matrix("datingTestSet3.txt") fig = plt.f ...