csu 最优对称路径(bfs+记忆化搜索)
1106: 最优对称路径
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 371 Solved: 77
[Submit][Status][Web Board]
Description
一个n行n列的网格,每个格子里有一个1到9的数字。你需要从左上角走到右下角,其中每一步只能往上、下、左、右四个方向之一走到相邻格子,不能斜着走,
也不能走出网格,但可以重复经过一个格子。为了美观,你经过的路径还必须关于“左下-右上”这条对角线对称。下图是一个6x6网格上的对称路径。
![](http://acm.csu.edu.cn/OnlineJudge/upload/201208/1106.png)
Input
输入最多包含25组测试数据。每组数据第一行为一个整数n(2<=n<=200)。以下n行每行包含n个1到9的数字,表示输入网格。输入结束标志为n=0。
Output
对于每组数据,输出合法路径中,数字之和最小的路径条数除以1,000,000,009的余数。
Sample Input
2
1 1
1 1
3
1 1 1
1 1 1
2 1 1
0
Sample Output
2
3 这个题不用SPFA的话就不能用vis数组。。因为优先级不能保证是以费用优先。。但是SPFA一个点能够进队列多次,那么就能够得到从(1,1)->(x,y)最小
的花费了。先预处理最小距离,然后记忆化搜索进行计数,就能够得到所有方案数了,很好的一个题目。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <queue>
#include <string.h>
using namespace std;
typedef long long LL;
const LL mod = ;
const int INF =;
const int N = ;
int v[N][N],dis[N][N],n;
LL dp[N][N];
bool vis[N][N];
int dir[][] = {{,},{-,},{,},{,-}};
int MIN;
struct Node{
int x,y;
};
void bfs(){
//memset(vis,false,sizeof(vis));
queue<Node> q;
Node s;
s.x = ,s.y = ,dis[][] = v[][];
q.push(s);
while(!q.empty()){
Node now = q.front();
q.pop();
if(now.x+now.y==n+){
MIN = min(dis[now.x][now.y],MIN);
}
// vis[now.x][now.y] = 1;
for(int i=;i<;i++){
Node next;
next.x = now.x+dir[i][];
next.y = now.y+dir[i][];
if(next.x<||next.y<||next.x>n||next.y>n||next.x+next.y>n+/*||vis[next.x][next.y]*/) continue;
if(dis[next.x][next.y]>dis[now.x][now.y]+v[next.x][next.y]){
dis[next.x][next.y]=dis[now.x][now.y]+v[next.x][next.y];
q.push(next);
}
}
}
}
LL dfs(int x,int y){
if(dp[x][y]!=-) return dp[x][y];
if(x+y==n+){
if(dis[x][y]==MIN) dp[x][y]=;
else dp[x][y] = ;
return dp[x][y];
}
dp[x][y] = ;
for(int i=;i<;i++){
int nextx = x+dir[i][];
int nexty = y+dir[i][];
if(nextx<||nexty<||nextx+nexty>n+) continue;
if(dis[x][y]+v[nextx][nexty]==dis[nextx][nexty])
dp[x][y] = (dp[x][y]+dfs(nextx,nexty))%mod;
}
return dp[x][y];
}
int main(){
while(scanf("%d",&n)!=EOF,n){
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
scanf("%d",&v[i][j]);
if(i+j>n+){
v[n+-j][n+-i] += v[i][j];
}
dis[i][j] =INF;
}
}
MIN = INF;
bfs();
memset(dp,-,sizeof(dp));
LL ans = dfs(,);
printf("%lld\n",ans);
}
return ;
}
csu 最优对称路径(bfs+记忆化搜索)的更多相关文章
- FZU 2092 收集水晶 bfs+记忆化搜索 or 暴力
题目链接:收集水晶 一眼看过去,觉得是普通的bfs,初始位置有两个.仔细想了想...好像如果这样的话..........[不知道怎么说...T_T] dp[12][12][12][12][210] 中 ...
- HDU 4444 Walk (离散化建图+BFS+记忆化搜索) 绝对经典
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4444 题意:给你一些n个矩形,给你一个起点,一个终点,要你求从起点到终点最少需要转多少个弯 题解:因为 ...
- [Swust OJ 409]--小鼠迷宫问题(BFS+记忆化搜索)
题目链接:http://acm.swust.edu.cn/problem/409/ Time limit(ms): 1000 Memory limit(kb): 65535 Description ...
- luogu1514 [NOIp2010]引水入城 (bfs+记忆化搜索)
我们先bfs一下看看是否能到最底下的所有点 如果不能的话,直接把不能到的那几个数一数就行了 如果能的话: 可以发现(并不可以)某格能到达的最底下的格子一定是一个连续的区间 (因为如果不连续的话,我们先 ...
- FZU 2092 bfs+记忆化搜索
晚上团队训练赛的题 和普通bfs不同的是 这是同时操纵人与影子两个单位进行的bfs 由于可能发生人和影子同时接触水晶 所以不可以分开操作 当时使用node记录人和影子的位置 然后进行两重for循环来分 ...
- 【BZOJ 1415】 1415: [Noi2005]聪聪和可可 (bfs+记忆化搜索+期望)
1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1640 Solved: 962 Description I ...
- dfs+记忆化搜索,求任意两点之间的最长路径
C.Coolest Ski Route 题意:n个点,m条边组成的有向图,求任意两点之间的最长路径 dfs记忆化搜索 #include<iostream> #include<stri ...
- ACM-ICPC 2018 徐州赛区网络预赛 B BE, GE or NE(博弈,记忆化搜索)
链接https://nanti.jisuanke.com/t/31454 思路 开始没读懂题,也没注意看数据范围(1000*200的状态,记忆化搜索随便搞) 用记忆化搜索处理出来每个状态的胜负情况 因 ...
- HDU 1428 漫步校园(记忆化搜索,BFS, DFS)
漫步校园 http://acm.hdu.edu.cn/showproblem.php?pid=1428 Problem Description LL最近沉迷于AC不能自拔,每天寝室.机房两点一线.由于 ...
随机推荐
- 洛谷 P4721 【模板】分治 FFT 解题报告
P4721 [模板]分治 FFT 题目背景 也可用多项式求逆解决. 题目描述 给定长度为 \(n−1\) 的数组 \(g[1],g[2],\dots,g[n-1]\),求 \(f[0],f[1],\d ...
- 解决win7 64位操作系统下安装PL/SQL后连接报错问题: make sure you have the 32 bits oracle client installed
1. 在Oracle官网(http://www.oracle.com/technetwork/topics/winsoft-085727.html)下载文件: instantclient-basic- ...
- 【hdu6051】If the starlight never fade
Portal --> hdu6051 Solution 神仙题qwq好吧我个人感觉是神仙题 这题其实有一个比较野路子的做法..就是..打表观察..反正场上ckw大佬就是这样把这题A穿的 ...
- db2 数据库操作JDBC .addBatch() 方法执行时,报错排查结果
今天调试db2数据的存储时,jdbc使用addBatch方法时,抛出异常,异常信息如下: [jcc][1091][10404][3.62.56] 数据转换无效:参数实例 对于所请求的转换无效. ER ...
- linux下ffmpeg安装(转)
1.ffmpeg下载地址: http://www.ffmpeg.org/download.html 2.解压 1 $ tar xzvf ffmpeg.tar.bz2 这里作者假设已经重命名为ffm ...
- helm 安装prometheus operator 并监控ingress
1.helm安装 curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.shchmod 7 ...
- 通过循环判断size()清理queue的问题
今天犯了个二逼问题,我想清理一个queue里对象,用了以下方法: ;i<objQueue.size();++i) { T* p_obj = objQueue.front(); delete p_ ...
- goaccess日志分析
对于nginx日志分析,有很多工具,衡量好坏的标准大概就是三快:安装快,解析快,上手快.满足这三点的goaccess确实是居家必备良药. 话说这个标题其实有点委屈GoAccess了,它是一个日志分析工 ...
- 洛谷P1124 文件压缩
https://www.luogu.org/problem/show?pid=1124 题目背景 提高文件的压缩率一直是人们追求的目标.近几年有人提出了这样一种算法,它虽然只是单纯地对文件进行重排,本 ...
- 还不会做! 树上的gcd 树分治 UOJ33
题目链接:http://uoj.ac/problem/33 题解链接:http://vfleaking.blog.uoj.ac/blog/38 现在感觉到了做OI的层层递进的思路的伟大之处,作为一个大 ...