博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu1428 递归形式dp(记忆化搜素):A能到B的条件是A到目的地最短路大于B到目的地最短路...
阅读量:7236 次
发布时间:2019-06-29

本文共 1394 字,大约阅读时间需要 4 分钟。

自以为已经做了好多年dp,可最近随意一个dp放在眼前却总是不能想到!!

先用bfs(队列)处理每个点到目的地最短路,不用转化为图用dijkstra,麻烦且超时。

然后记忆化搜素,对于起始点,四个方向若有到达目的地最短路小于当前点,则起始点的方案数+=该方向点到目的地方案数。

1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 struct dian{ 7 int x,y,time; 8 }; 9 int xx[]={
1,-1,0,0,};10 int yy[]={
0,0,1,-1};11 int n,dis[55][55],a[55][55];12 long long vis[55][55];13 void shortpath()14 {15 dian n1,n2;16 queue
q;17 while (!q.empty()) q.pop();18 n1.x=n; n1.y=n; n1.time=a[n][n];19 q.push(n1); dis[n][n]=n1.time;20 while (!q.empty())21 {22 n1=q.front(); q.pop();23 for (int i=0;i<4;i++)24 {25 n2.x=n1.x+xx[i]; n2.y=n1.y+yy[i]; n2.time=n1.time+a[n2.x][n2.y];26 if (n2.x>0&&n2.x<=n&&n2.y>0&&n2.y<=n&&dis[n2.x][n2.y]>n2.time)27 {28 dis[n2.x][n2.y]=n2.time;29 q.push(n2);30 }31 }32 }33 }34 long long dp(int x,int y)35 {36 if (x==n&&y==n) vis[x][y]=1;37 if (vis[x][y]!=-1) return vis[x][y];38 int x1,y1;39 long long temp=0;40 for (int i=0;i<4;i++)41 {42 x1=x+xx[i]; y1=y+yy[i];43 if (x1>0&&x1<=n&&y1>0&&y1<=n&&dis[x1][y1]
View Code

传送门:

转载于:https://www.cnblogs.com/xiao-xin/articles/4066370.html

你可能感兴趣的文章
css-背景类样式
查看>>
renren_login_urllib带Cookie
查看>>
处理数据时该注意的
查看>>
Markdown 常用语法
查看>>
notepad++ plugins manager 无法下载插件
查看>>
基本数据结构 -- 树简介
查看>>
【Codeforces Round #405 ( Div 2)】题解
查看>>
虚拟磁盘工具vmkfstools的使用
查看>>
HP LaserJet Pro P1106网络打印机64位驱动安装
查看>>
【博客话题】我的linux戏曲
查看>>
继之前SCVMM WinRM问题后重新添加群集后Windows Azure Pack创建虚拟机失败
查看>>
第十六集被忽视的帧中继:原理及实验
查看>>
关于Ubuntu上Eclipse不显示手机设备
查看>>
iPhone的Push(推送通知)功能原理浅析
查看>>
Oracle 11g Release 1 (11.1) 游标——SQL 游标(隐式)
查看>>
欧拉函数
查看>>
用groovy写抓票程序
查看>>
设计资源推荐-20个漂亮的免费PSD图标格式
查看>>
学用MVC4做网站:序
查看>>
mysql kill操作
查看>>