soj1084滑雪比赛

背景:没考虑到海拔还可以为0和负,所以就一直wrong了好久。

思路:dfs+记忆化搜索+递归。

学习:记忆化搜索。

#include <iostream>
#include <cstring>
using namespace std;
int area[52][52],memory[52][52];
int m,n,max_time,k;
int judge(int i1,int j1,int i,int j)
{
    if(area[i1][j1]<area[i][j]&&i1>0&&j1>0&&i1<=n&&j1<=m)
        return 1;
    else return 0;
}
void dfs(int i,int j,int time)
{
    bool ok=false;
    if(memory[i][j])
    {
        time+=memory[i][j];
        k=((k<time)?time:k);
        max_time=((max_time<time)?time:max_time);
        return;
    }
    if(judge(i+1,j,i,j)) {dfs(i+1,j,time+1);ok=true;}
    if(judge(i,j+1,i,j)) {dfs(i,j+1,time+1);ok=true;}
    if(judge(i-1,j,i,j)) {dfs(i-1,j,time+1);ok=true;}
    if(judge(i,j-1,i,j)) {dfs(i,j-1,time+1);ok=true;}
    if(!ok) k=((k<time)?time:k);
}
int main(void)
{
    while(cin>>n>>m&&n&&m)
    {
        memset(area,0,sizeof(area));
        memset(memory,0,sizeof(memory));
        max_time=0;
        int i,j;
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
                cin>>area[i][j];
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
            {
                k=0;
                dfs(i,j,0);
                memory[i][j]=k;
            }
        cout<<max_time<<endl;
    }
    return 0;
}
时间: 2024-10-19 01:40:05

soj1084滑雪比赛的相关文章

Usaco 滑雪比赛 Bobsledding, 2009 Dec(dp)

Description 滑雪比赛bobsled 贝西参加了一场高山急速滑雪比赛,滑道总长度为 L.出发时,她的初速度为 1,贝西可以加速 或减速,每过 1 米,她能将速度增加 1.减少 1 或保持不变.在滑雪的过程中,贝西会遇到 N 个转 弯点,编号为 i 的转弯点距离起点有 Ti 米.安全起见,贝西到达 i 号转弯点时的速度不能超过 Si. 穿过终点的速度是没有限制的.请问在整个比赛过程中,贝西能够达到的最大速度是多少? Input Format 第一行:两个整数 L 和 N,2 ≤ L ≤

【USACO】DP动态规划小测(一)

{20160927 19:30~21:30} 总分400分,我113.33,稳稳地垫底了......(十分呼应我上面的博客名,hhh~)过了这么多天我才打完所有代码,废话我也就不多说了.不过,虽然时间花费的多,但我觉得我的PG也是“博采众长”了. ------------------------------------------------------------------------------------------------------------------------------

蒙牛出战2018世界杯 体育营销背后有“帽子戏法”

据媒体报道,12月20日,蒙牛宣布成为2018年俄罗斯世界杯全球官方赞助商.据悉,蒙牛是世界杯赞助商中首次出现的乳业品牌.而蒙牛认为此次赞助俄罗斯世界杯意味着中国乳业第一次进入欧洲市场. 这将是又一个国内大企业的世界杯体育营销攻略吗?或许,对于蒙牛的2018来说,这只是其连中三元"帽子戏法"的开球而已. 用足球亮相全球,为世界乳业开好"第一球" 别不信!蒙牛进入世界杯,其实是全球乳业的一件大事,因为这一次,实打实是蒙牛拿下了一个"世界第一". 蒙

NPU 2015年陕西省程序设计竞赛网络预赛(正式赛)F题 和谐的比赛(递推 ||卡特兰数(转化成01字符串))

Description 今天西工大举办了一场比赛总共有m+n人,但是有m人比较懒没带电脑,另外的n个人带了电脑.不幸的是,今天机房的电脑全坏了只能用带的电脑,一台电脑最多两人公用,确保n>=m.但是大家来的时间不同,随机次序来机房,带电脑的人直接准备比赛而没带电脑的人需要向带电脑并还没和别人公用的人求助(当然会答应).但是,如果不存在带电脑并还没和别人公用的人,那他就要等了,等是很让人头疼的,这就不和谐了,当然假如没有这样的情况发生比赛是很和谐的. Input 输入多组数据,每组数据只有一行m(

NOJ 2015年陕西省程序设计竞赛网络预赛(正式赛)(和谐的比赛-dp寻路)

F - 和谐的比赛 Time Limit: 3000 ms        Memory Limit: 10240 KB Submit Description 今天西工大举办了一场比赛总共有m+n人,但是有m人比较懒没带电脑,另外的n个人带了电脑.不幸的是,今天机房的电脑全坏了只能用带的电脑,一台电脑最多两人公用,确保n>=m.但是大家来的时间不同,随机次序来机房,带电脑的人直接准备比赛而没带电脑的人需要向带电脑并还没和别人公用的人求助(当然会答应).但是,如果不存在带电脑并还没和别人公用的人,那

口袋中球的取出顺序问题,比赛名单问题

对于以下这两种问题是离散数学与概论在编程中的应用: 两个乒乓球队进行比赛,各队人.甲队为A,B,C     乙队为 X,Y,Z    抽签决定比赛名单.有人向队员打听比赛名单,A说他不和X比,C说他不和X,Z比,请编程序找出3组比赛名单 #include<stdio.h> void Game_list() { char i,j,k; /*i是a的对手;j是b的对手;k是c的对手*/ for (i='x';i<='z';i++) for (j='x';j<='z';j++) if (

ACM比赛经验

ACM比赛经验: 推荐此篇文章打印,与模板放在一起. 1. 比赛中评测会有些慢,偶尔还会碰到隔10分钟以上才返回结果的情况,这段时间不能等结果,必须开工其他题,如果WA,两道题同时做.交完每道题都要先打印. 2. 比赛时发的饭不是让你当时就吃的,那是给你赛后吃的.基本上比赛中前几名的队都没人吃,除非领先很多. 3. 很多选手,尤其是第一次参加比赛的,到一个新环境,全当旅游了,参观的参观,找同学的找同学,玩玩乐乐就把正事抛到脑后了,结果比赛自然没什么好成绩,这样的例子太多了.所以到参赛地后要时刻不

[ACM] POJ 1088 滑雪 (记忆化搜索复习)

滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 77763   Accepted: 28905 Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区域中最长底滑坡.区域由一个二维数组给出.数组的每个数字代表点的高度.下面是一个例子 1 2 3 4 5 16 17

P1434 滑雪

P1434 滑雪 题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在一个区域中最长的滑坡.区域由一个二维数组给出.数组的每个数字代表点的高度.下面是一个例子: 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 一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小.在上面的