题目:   

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

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

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

思绪连篇啊!这是一道著名的DP题目——滑雪改编。当时,我为了避免后效性,编了一个很弱的DP后,又重复地扫了好几遍,最后还是错了一个点。令我印象深刻的是陈卓凡大神,一个搜索0ms全过!!

站在现在的立场,此题还是挺容易的。当时我怎么也理解不了为什么标程的DP要排序,而现在在思考的时候,就发觉排序是一定要的!我们先从大到小把每个值排一遍(当然同时要记录每个位置的坐标),然后从大到小去对每一个高度操作。对每个高度开一个f[i][j]表示到这个点最多能划的长度。每次操作时,寻找这个点四周的点,如果那个点比当前的点高(由于是从大到小排序的,比他高的点一定在之前已经处理过了),就更新。可能CZF大神的搜索与我的原理一致吧。

代码:

#include<stdio.h>
using namespace std;
longf[501][501],n,m,x[250001],y[250001],a[250001],i,j,ord,data[501][501],xx,yy,ans;
void qsort(int l,int r)
{
     int i,j,xx,yy,zz;
     if(l>=r) return;
     i=l;
     j=r;
    xx=a[i];yy=x[i];zz=y[i];
     while(i!=j)
     {
         while(a[j]>xx&&j>i) j--;
         if(i<j)
            {
                a[i]=a[j];x[i]=x[j];y[i]=y[j];
                i++;
            }
         while(a[i]<xx&&j>i) i++;
         if(i<j)
            {
                a[j]=a[i];x[j]=x[i];y[j]=y[i];
                j--;
            }
     }
    a[i]=xx;x[i]=yy;y[i]=zz;
     qsort(l,j-1);
     qsort(i+1,r);
}
long max(long a,long b)
{
  if (a>b) return a;return b;
}
int main()
{
  scanf("%ld %ld",&n,&m);
  for (i=1;i<=n;i++)
    for (j=1;j<=m;j++)
      {
       scanf("%ld",&data[i][j]);
        f[i][j]=1;
        ord=(i-1)*m+j;
       a[ord]=data[i][j];
       x[ord]=i;y[ord]=j;
      }
  qsort(1,ord);
  for (i=ord;i>0;i--)
    {
      xx=x[i];yy=y[i];
      if(xx>1&&data[xx-1][yy]>data[xx][yy])f[xx][yy]=max(f[xx][yy],f[xx-1][yy]+1);
      if(xx<n&&data[xx+1][yy]>data[xx][yy])f[xx][yy]=max(f[xx][yy],f[xx+1][yy]+1);
      if(yy>1&&data[xx][yy-1]>data[xx][yy])f[xx][yy]=max(f[xx][yy],f[xx][yy-1]+1);
      if(yy<m&&data[xx][yy+1]>data[xx][yy])f[xx][yy]=max(f[xx][yy],f[xx][yy+1]+1);
      if (f[xx][yy]>ans)ans=f[xx][yy];
    }
  printf("%ld",ans);
}

vijos1011题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. Web攻防系列教程之跨站脚本攻击和防范技巧详解

    摘要:XSS跨站脚本攻击一直都被认为是客户端Web安全中最主流的攻击方式.因为Web环境的复杂性以及XSS跨站脚本攻击的多变性,使得该类型攻击很 难彻底解决.那么,XSS跨站脚本攻击具体攻击行为是什么 ...

  2. R语言:利用caret包中的dummyVars函数进行虚拟变量处理

    dummyVars函数:dummyVars creates a full set of dummy variables (i.e. less than full rank parameterizati ...

  3. spring mvc 存取值

    (转) 1,使用HttpServletRequest获取 @RequestMapping("/login.do") public String login(HttpServletR ...

  4. js循环给li绑定事件实现 点击li弹出其索引值 和内容

    代码如下: html代码 <ul> <li>房产</li> <li>家居</li> <li>二手房</li> < ...

  5. 全景技术大揭秘,市场核心早洞悉——VR全景加盟

    未来已来,未来已见.2017是3D全景创业的天时,全景行业逐步走向成熟.全景智慧城市专注vr全景6年,技术国内遥遥领先.全景智慧城市市场总监常诚,透漏3D全景技术和市场的核心. 拍摄全景必备的设备:单 ...

  6. 图表(Chart & Graph)你真的用对了吗?

    欢迎大家持续关注葡萄城控件技术团队博客,更多更好的原创文章尽在这里~~ 工作中,我们常常会遇到各式各样的数据,例如网站性能,销售业绩,客户服务 .营销活动等数据.对于这些数据,有哪些行之有效的方法来形 ...

  7. 基于angular的route实现单页面cnodejs

    Angular ui-router 前言 之前不太理解前端怎么实现路由功能,以前知道有一种方式使用html5的pushState可以操作url才实现路由的功能,在实践项目中也用过一次,后来这种操作叫成 ...

  8. debian将默认中文改成英文

    $ sudo export LANG=en_US.UTF-8 $ sudo dpkg-reconfigure locales

  9. myeclipse导入项目时出现Exploded location overlaps an existing deployment错误解决方法

    版权声明:本文为博主原创文章,转载时请注明原文链接. 今天拿别人的项目,在自己的软件上配置,通过tomcat添加项目时出现了 Exploded location overlaps an existin ...

  10. Macbook怎么强制关闭后台程序?Macbook强制关闭后台程序的方法

    有时候我们的Macbook电脑运行某个程序卡在那里耗了很长时间,程序本身有可能提供了取消按钮,点了也没有反应,这时候我们就很想强制关闭它了,那么Macbook怎么强制关闭后台运行的程序呢?下面完美小编 ...