记忆化搜索即可,设DP[I][J]为可到达的最大步数。

输出时用了一种较笨拙的方法,还有一种方法是使用最长上升子序列的方式,挺好,先排序,这让我想起上次BESTCODER的一题

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm> using namespace std;
const int N=370;
struct {
int x,y;
}que[N*N],dir[8];
int num[N][N];
int dp[N][N];
int n,tf,f,l; bool ok(int x,int y,int i,int j){
if(x>=1&&x<=n&&y>=1&&y<=n){
if(num[x][y]>num[i][j])
return true;
}
return false;
} void dfs(int i,int j){
int tx,ty;
if(dp[i][j]!=-1) return ;
dp[i][j]=1;
for(int k=0;k<8;k++){
tx=i+dir[k].x;
ty=j+dir[k].y;
if(ok(tx,ty,i,j)){
dfs(tx,ty);
if(dp[i][j]==-1||dp[tx][ty]+1>dp[i][j])
dp[i][j]=dp[tx][ty]+1;
}
}
} int main(){
dir[0].x=2,dir[0].y=1;dir[1].x=2,dir[1].y=-1;
dir[2].x=-2,dir[2].y=1;dir[3].x=-2,dir[3].y=-1;
dir[4].x=1,dir[4].y=2; dir[5].x=-1;dir[5].y=2;
dir[6].x=1,dir[6].y=-2;dir[7].x=-1,dir[7].y=-2;
while(scanf("%d",&n)!=EOF){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&num[i][j]);
dp[i][j]=-1;
}
}
f=l=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(dp[i][j]==-1){
dfs(i,j);
if(f==l){
que[l].x=i,que[l].y=j;
l++;
}
else if(dp[i][j]>dp[que[l-1].x][que[l-1].y]||(dp[i][j]==dp[que[l-1].x][que[l-1].y]&&num[i][j]<num[que[l-1].x][que[l-1].y])){
l=f;
que[l].x=i,que[l].y=j;
l++;
}
else if(dp[i][j]==dp[que[l-1].x][que[l-1].y]&&num[i][j]==num[que[l-1].x][que[l-1].y]){
que[l].x=i,que[l].y=j;
l++;
}
}
}
}
printf("%d\n",dp[que[f].x][que[f].y]);
tf=f;f=l;
int tx,ty,x,y;
while(tf<f){
if(f==l){
printf("%d\n",num[que[tf].x][que[tf].y]);
}
x=que[tf].x; y=que[tf].y;
for(int i=0;i<=8;i++){
tx=x+dir[i].x;
ty=y+dir[i].y;
if(ok(tx,ty,x,y)){
if(dp[tx][ty]+1==dp[x][y]){
if(f==l){
que[l].x=tx,que[l].y=ty;
l++;
}
else if(dp[tx][ty]>dp[que[l-1].x][que[l-1].y]||(dp[tx][ty]==dp[que[l-1].x][que[l-1].y]&&num[tx][ty]<num[que[l-1].x][que[l-1].y])){
l=f;
que[l].x=tx,que[l].y=ty;
l++;
}
else if(dp[tx][ty]==dp[que[l-1].x][que[l-1].y]&&num[tx][ty]==num[que[l-1].x][que[l-1].y]){
que[l].x=tx,que[l].y=ty;
l++;
}
}
}
}
tf++;
if(tf==f){
tf=f; f=l;
}
}
}
return 0;
}

  

POJ 2111的更多相关文章

  1. POJ 2111 DP+记录路径

    题意: 思路: 类似滑雪 //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm& ...

  2. 专题1:记忆化搜索/DAG问题/基础动态规划

      A OpenJ_Bailian 1088 滑雪     B OpenJ_Bailian 1579 Function Run Fun     C HDU 1078 FatMouse and Chee ...

  3. POJ 2442 Sequence【堆】

    题目链接:http://poj.org/problem?id=2442 题目大意:给出一个m*n的矩阵,从每一行中取出一个数相加.能得到n^m个不同的结果.要求输出当中前n项. 建立一个以n元数组为底 ...

  4. poj和hdu部分基础算法分类及难度排序

    最近想从头开始刷点基础些的题,正好有个网站有关于各大oj的题目分类(http://www.pythontip.com/acm/problemCategory),所以写了点脚本把hdu和poj的一些题目 ...

  5. POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理

    Halloween treats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7644   Accepted: 2798 ...

  6. POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理

    Find a multiple Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7192   Accepted: 3138   ...

  7. POJ 2965. The Pilots Brothers' refrigerator 枚举or爆搜or分治

    The Pilots Brothers' refrigerator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22286 ...

  8. POJ 1753. Flip Game 枚举or爆搜+位压缩,或者高斯消元法

    Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 37427   Accepted: 16288 Descr ...

  9. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

随机推荐

  1. 关于jetty服务器默认首页和端口设置

    一.jetty服务器部署.启动成功后,在浏览器输入http://localhost:8080/ 可以直接访问到jetty欢迎首页. 这是因为在Jetty包中默认带了一个test.war的应用,在${J ...

  2. Linq的Except

    https://msdn.microsoft.com/en-us/library/bb300779(v=vs.100).aspx , , , }; , , , }; var list = list1. ...

  3. 详解Google第二代TPU 既能推理又能训练 性能霸道

    详解Google第二代TPU 既能推理又能训练 性能霸道 转自:http://www.cnbeta.com/articles/tech/613639.htm 5月18日凌晨,Google CEO Su ...

  4. 【POI 2007】 山峰和山谷

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1102 [算法] 广度优先搜索 [代码] #include<bits/stdc+ ...

  5. 【转】不要使用SBJSON(json-framework)

    原文网址:http://blog.devtang.com/2012/05/05/do-not-use-sbjson/ 不知道为什么,在iOS开发中,有很多人使用 SBJSON (又被称作json-fr ...

  6. EOJ 1113 装箱问题

    有一个箱子容量为 V (正整数,0≤V≤20000),同时有 n 个物品(0<n≤30),每个物品有一个体积(正整数).要求从 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小. Inp ...

  7. Eclipse-Error:笔记-1

    ylbtech-Eclipse-Error:笔记-1 1.返回顶部 1. Whitelabel Error PageThis application has no explicit mapping f ...

  8. Object源码分析(一)

    刚注册博客,准备学习一下java源码,当然首先从Object看起. 介绍一下Object: Object是所有类层次结构的根,所有的类都将Object作为超类.所有的对象,包括数组,都实现了Objec ...

  9. docker(部署常见应用):docker部署mysql

    上节回顾:docker(部署常见应用):docker部署nginx docker部署mysql:5.7.26 # 下载镜像 docker pull mysql: # 查看镜像 docker image ...

  10. windows7 安装 choco

    windows7 安装 choco: cmd下: @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -N ...