http://poj.org/problem?id=1088

滑雪
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 68159   Accepted: 25100

Description

Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子

 1  2  3  4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9

一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-...-3-2-1更长。事实上,这是最长的一条。

Input

输入的第一行表示区域的行数R和列数C(1 <= R,C <= 100)。下面是R行,每行有C个整数,代表高度h,0<=h<=10000。

Output

输出最长区域的长度。

Sample Input

5 5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

Sample Output

25
我自己写的一个代码,感觉有点像记忆化搜索,但又不是。所以我同学有点不理解我的代码。
我后面用我的代码和花姐AC了的代码进行输出对比,中午睡觉前开始,睡觉完了还是没有发现不一样的。。。哭了。。T_T。。
我的思路是从第一个开始一个一个搜索当前能走的最远距离,然后用dp存储最远距离。。(在主函数里面)在搜索时如果走到以前的找到过最远距离的地方时直接加上距离然后就可以返回了。
对比的时候,我的文件名叫wang.cpp,花姐的文件名为lei.cpp,随机输入文件为in.cpp。。
我 自己WA的代码:
#include<iostream>
#include<cstdio>
#include<cstring>using namespace std;int map[110][110];
int dp[110][110];   //这个位置能走的最远距离
int maxx,p;int mark[4][2] = {{0,1},{0,-1},{-1,0},{1,0}};void Dfs(int x, int y, int t)
{int i,j,q,now;if(map[x][y] == -1)  //到边缘退出{return ;}if(dp[x][y]!=0)  //这条路经已经求出最长,则接下来的不用再搜了,剪枝{t = t+dp[x][y];if(t > p){p = t;}return ;}t = t+1;  //当前这个位置没有求过最优解并且没有离开边界if(t > p){p = t;}for(q = 0; q < 4; q++){i = x+mark[q][0];j = y+mark[q][1];if(map[i][j] < map[x][y]){now = t;Dfs(i,j,now);}}return ;
}int main()
{int r,c,t,i,j;while(scanf("%d%d",&r,&c)!=EOF){maxx = 0;memset(map,-1,sizeof(map));memset(dp,0,sizeof(dp));for(i = 1; i <= r; i++){for(j = 1; j <= c; j++){scanf("%d",&map[i][j]);}}for(i = 1; i <= r; i++){for(j = 1; j <= c; j++){t = 0;       //清空p = 0;Dfs(i,j,t);dp[i][j] = p;   //记录这个位置的最远距离if(p > maxx){maxx = p;}printf("%d ",dp[i][j]);}printf("\n");}printf("%d\n",maxx);}return 0;
}

花姐AC代码:

#include<stdio.h>
int n,m;
int map[100][100];
int lon[100][100];
int dir[4][2]= {1,0,0,1,-1,0,0,-1};
bool inmap(int x,int y)
{if(x>=0&&x<n&&y>=0&&y<m)return true;elsereturn false;
}
int dfs(int x,int y)
{int nx,ny,i;int max1=1;if(lon[x][y]>1)return lon[x][y];for(i=0; i<4; i++){nx=x+dir[i][0];ny=y+dir[i][1];if(inmap(nx,ny)&&map[x][y]>map[nx][ny]){lon[x][y]=dfs(nx,ny)+1;if(lon[x][y]>max1)max1=lon[x][y];}}lon[x][y]=max1;return max1;
}
int main()
{int i,j;int longest;scanf("%d%d",&n,&m);longest=1;for(i=0; i<n; i++)for(j=0; j<m; j++){scanf("%d",&map[i][j]);lon[i][j]=1;}for(i=0; i<n; i++){for(j=0; j<m; j++){int t=dfs(i,j);longest=longest>t?longest:t;}}for(i=0; i<n; i++){for(j=0; j<m; j++){printf("%d ",lon[i][j]);}printf("\n");}printf("%d\n",longest);return 0;
}

随机产生输入数据程序(in)代码:

#include <cstdio>
#include <ctime>
#include <time.h>
#include <cstdlib>
using namespace std;
double radom()         //生成[0,1]之间的均匀随机数
{return (double)rand()/RAND_MAX;
}
//int random(int m)
//{
//    return (int)(random()*(m-1)+0.5);
//}
int main()
{int n,m, i, j, x;srand(time(NULL));    //散播随机种子(头文件需要time.h和stdlib.h)n = rand()%100 +1;    //产生1到100的随机数并赋值给nm = rand()%100 +1;
//    freopen("in.txt","r",stdout);printf("%d %d\n",n,m);
//    scanf("%d",&n);for(i=0; i<n; i++){for(j=0; j<m; j++){x = rand()%100000;printf("%d ",x);}printf("\n");}return 0;
}

windows下批处理对比文件指令(用txt写完后改为bat批处理格式):

@echo off
:again
in > input                                    ;in.exe里面的随机数输入到input文件中
lei < input > output.l                  ;input文件里面的随机数数据输入到lei.exe中并把其得到的结果存放到outputl文件里面
wang <input > output.w           ;同上一行
fc output.l output.w                   ;对比文件outputl和outputw文件
if not errorlevel 1 goto again  ;如果两个文件里面的数据相同则继续循环
pause                                         ;否则就暂停
以上所有cpp文件都要进行编译链接后最后再运行批处理文件。。

POJ 1088 滑雪(输出对比)相关推荐

  1. poj 1088 滑雪(线性DP)

    滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 81553   Accepted: 30437 Description ...

  2. poj 1088 滑雪 详解

    http://poj.org/problem?id=1088 这是一道dp入门题,不过我一直没想明白应该怎么dp.今天,在做自己学校oj的算法基础题时看到这题,标注着dp的分类,加上我一直都比较喜欢做 ...

  3. 动态规划 POJ 1088 滑雪

    Description Michael 喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知 ...

  4. POJ 1088 滑雪 (动规)

    滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 75664 Accepted: 28044 Description Mich ...

  5. POJ - 1088 滑雪 【DP】【DFS】

    Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...

  6. poj 1088 滑雪 (dp)

    题目链接 题意就不多解释了,题目思路很简单,搜索就行了,但是暴搜会TLE,但是对于每一个dfs(X, Y),如果参数一样的话结果也是一样的,我们用一个二维数组去保存每次计算的位置的结果,最后从所有的解 ...

  7. poj 1088滑雪

    经典的动态规划问题: 1 #include<iostream> 2 3 using namespace std; 4 5 int b[101][101]; 6 int d[101][101 ...

  8. I - 滑雪 POJ - 1088(深搜,记忆化搜索)

    Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区域中最长底滑坡. ...

  9. POJ 1088(滑雪)

    题目链接 题意 给一个R.C数字矩阵,每个点可以向上下左右且比自己小的方向移动,问最长移动距离 AC dfs + 记忆 #include <iostream> #include <a ...

最新文章

  1. ASP.NET MVC+Bootstrap个人博客之打造清新分页Helper(三)
  2. 大TTT需要复习的课件PPT以及大作业完成链接
  3. go 指针变量和普通变量的转化_C语言 | 指向结构体变量的指针变量
  4. 企业级应用能帮助闪存走出产能过剩时代吗?
  5. 味道不错的NBearLite查询语法
  6. 网络IO超时的几种实现
  7. 计算机网络技术班会,【主题班会】17计算机网络技术三班“走出手机幻境,拥抱真实生活”主题班会...
  8. 外设驱动库开发笔记1:AD56xx系列DAC驱动
  9. 数据库服务的安装,启动,关闭
  10. [导入]用ASP.Net(C#)连接Oracle数据库的方法
  11. 3dmax uv展开
  12. 关于空间计量模型中自回归系数大于1的解释
  13. C#数据库编程实战经典
  14. R语言基于mgcv包进行广义可加模型及交互作用演示(2)
  15. 车间图纸管理软件-车间无纸化管理解决方案
  16. 单片机---HLK-W801移植Nes模拟器(一)
  17. 任正非 《一江春水向东流》
  18. LLVM学习笔记----clang、llvm-as、llvm-dis、llc、 llvm-link、lli
  19. 服务器kvm切换器维修,服务器数字KVM切换器
  20. Android入门篇

热门文章

  1. PCIE设备如何降速降带宽
  2. VS2005错误 error PRJ0003 生成 cmd.exe 时出错
  3. Hibernate第四篇【集合映射、一对多和多对一】
  4. 微信公众号现金红包红包 企业付款openid 获取
  5. 设计模式(七)——适配器模式
  6. linux键盘背光指令,在Linux下开启背光Led键盘的背光
  7. Loss和神经网络训练
  8. 【区块链实战】区块链在哪些行业得到了应用
  9. ACCU天气API以及Okhttp、Retrofit、RxJava的使用
  10. Java程序员跳槽之旅,离开京东,14面面试回顾和一点感想