hdoj1428 漫步校园
来源:互联网 发布:网络信息管理 编辑:程序博客网 时间:2024/04/29 02:12
这题居然是我们省赛的一题。。一模一样,早做了这题就好了,orz。。。。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1428
我比赛时是先转换为图后用spfa求最短路的,再用记忆化搜索做的,结果超时。。。。
其实不用转为图(转化为图再做最短路会浪费大量时间),直接用再原矩阵的基础上用宽搜做(队列优化)最短路,再记忆化搜索,就不会超时。
具体代码如下:
#include<iostream>using namespace std;#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<queue> #define N 51struct node{ int x,y; node(int a,int b) { x=a; y=b; } node(){}; };int key[4][2]={0,1,0,-1,1,0,-1,0};int n,map[N][N],d[N][N];long long f[N][N];void find(){ int i; node s; queue<node> Q; memset(d,1,sizeof(d)); d[n][n]=map[n][n]; Q.push(node(n,n)); while (!Q.empty()) { s=Q.front(); Q.pop(); for (i=0;i<4;++i) { int x,y; x=s.x+key[i][0]; y=s.y+key[i][1]; if (x>0&&x<=n && y>0&&y<=n) { if (d[x][y]>d[s.x][s.y]+map[x][y]) { d[x][y]=d[s.x][s.y]+map[x][y]; Q.push(node(x,y)); } } } } }long long dp(int x,int y){ if (f[x][y]!=-1) return f[x][y]; int i; long long t=0; for (i=0;i<4;++i) { int x1,y1; x1=x+key[i][0]; y1=y+key[i][1]; if (x1>0&&x1<=n && y1>0&&y1<=n) if (d[x1][y1]<d[x][y]) { t+=dp(x1,y1); } } return f[x][y]=t;}int main(){ while (~scanf("%d",&n)) { int i,j; for (i=1;i<=n;++i) for (j=1;j<=n;++j) scanf("%d",&map[i][j]); find(); memset(f,-1,sizeof(f)); f[n][n]=1; dp(1,1); printf("%I64d\n",f[1][1]); } return 0; }
0 0
- hdoj1428 漫步校园
- 漫步校园
- 漫步校园
- 漫步校园
- hdoj1428
- hdu 1428(漫步校园)
- hdu 1428 漫步校园
- HDU 1428 漫步校园
- hdoj_1428漫步校园
- hdu1428漫步校园
- hdu_1428 漫步校园
- hdu 1428 漫步校园
- HDU 1428 校园漫步
- HDU1428 漫步校园
- HDU 1428 漫步校园
- hdu 2489 漫步校园
- hdu 1428 漫步校园
- HDOJ 1428 漫步校园
- tomcat动态查看服务器打印日志
- SSH框架简单配置文件
- UIImage灰化 反色 棕色
- 抗锯齿方法两种(其一:paint.setAntiAlias(ture);paint.setBitmapFilter(true))
- 初学linux之笔记
- hdoj1428 漫步校园
- Spring4.0.2+Hibernate4.5.1+struts2.3.16.1
- HEVC 常用之 CU、PU、TU分析
- 【OpenCV学习笔记】【函数学习】十二(cvCanny()函数及其阈值设置的比较)
- Java面向对象——正则表达式
- 在 Rails 中使用 JavaScript
- onTouch和onClick事件处理
- sonar常见问题及修改建议
- css中使用id和class 的不同