博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记忆化搜索--HDU 1428
阅读量:7080 次
发布时间:2019-06-28

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

此题大意讲的是从起点到终点,要求若从A到B,则需保证A到终点的时间比B到终点时间要长。由于有此要求,必然想到动态规划记录其最短路线的状态,但传统动态规划却解决不了。

故采用记忆化搜索,记忆化搜索=搜索形式+动态规划思想

1 #include
2 #include
3 #include
4 using namespace std; 5 int map[51][51],m[51][51]; 6 __int64 s[51][51]; 7 int dir[4][2]={
{-1,0},{
1,0},{
0,-1},{
0,1}}; 8 int n; 9 10 struct pp 11 {
12 int x,y; 13 }; 14 queue
que; 15 16 void bfs() 17 {
18 19 pp a,b; 20 int dx,dy,i,spend; 21 a.x=n-1;a.y=n-1; 22 m[n-1][n-1]=map[n-1][n-1]; 23 que.push(a); 24 while(!que.empty()) 25 {
26 b=que.front(); 27 que.pop(); 28 for(i=0;i<4;i++) 29 {
30 dx=b.x+dir[i][0]; 31 dy=b.y+dir[i][1]; 32 if(dx>=0&&dx
=0&&dy
0) 50 return s[x][y]; 51 if(x==n-1&&y==n-1) 52 return 1; 53 for(i=0;i<4;i++) 54 { 55 int xx=x+dir[i][0]; 56 int yy=y+dir[i][1]; 57 if(xx>=0&&xx
=0&&yy
m[xx][yy]) 60 { 61 s[x][y]+=dfs(xx,yy); 62 } 63 } 64 } 65 return s[x][y]; 66 } 67 int main() 68 { 69 int i,j; 70 while(cin>>n) 71 { 72 for(i=0;i
>map[i][j]; 76 m[i][j]=-1; 77 } 78 while(!que.empty()) que.pop(); 79 memset(s,0,sizeof(s)); 80 bfs(); 81 dfs(0,0); 82 cout<
<

多编程,多思考,多付出,才会有成绩!

转载于:https://www.cnblogs.com/hankers/archive/2012/02/18/2357240.html

你可能感兴趣的文章
云计算基础之什么是云计算?
查看>>
10个实用的Django技巧和建议
查看>>
带你学C带你飞!
查看>>
html_03 | HTML——③ HTML 表单详解
查看>>
小猿圈解决vue权限问题的方案
查看>>
Express.js 解析 Post 数据类型的正确姿势
查看>>
关于UI设计行业的认识再到认识
查看>>
String类自带的字符串处理原生方法
查看>>
使用PHP+淘宝IP地址库接口获得IP所属地理位置
查看>>
我的友情链接
查看>>
Nginx白名单设置
查看>>
通过批处理文件使用7zip执行备份;将1日和15日的备份再另外备份;定时清理过期备份...
查看>>
安装 CentOS 时找不到硬盘的解决办法
查看>>
Java中的访问控制public,private,protected,package
查看>>
Foxmail 6.5在Windwos 7下无法编辑签名
查看>>
Putty 连接Centos服务器
查看>>
Active Diretory 目录服务相关命令
查看>>
建立属于自己的Cydia源,并获取cydia中的deb安装包,cyder不报错汉化版
查看>>
python列表中任意两个元素交换
查看>>
中国Linux联盟 - 圣诞节寄语
查看>>