vijos1011题解
题目:
顺治喜欢滑雪,这并不奇怪,因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待太监们来载你。顺治想知道载一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子:
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题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- SharePoint 无法删除搜索服务应用程序
在SharePoint的使用中,经常会遇到某些服务创建失败,某些服务删除不成功的情况.这里,我们就遇到了搜索服务创建失败,然后删除也不成功,使用管理中心的UI无法删除,PowerShell命令也无法删 ...
- laravel5.2之logout注销账号无效
问题描述:laravel5.2的框架,使用框架auth用户认证后,进行账号注销退出的时候,无法实现. 只有清除浏览器缓存,才能实现账号退出. 解决办法: 改变路由 Route::get('auth/l ...
- 你为什么必须(从现在开始就)掌握linux
写在前面 在我看来,人人都应该学习linux,但这不是本文探讨的重点.本文主要从软件测试人员的角度谈谈学习和掌握linux的重要性.必要性.紧迫性. 另外: 这里所说的linux系统,是unix系统和 ...
- Docker 镜像小结 - 每天5分钟玩转 Docker 容器技术(21)
本节我们对 Docker 镜像做个小结. 这一部分我们首先讨论了镜像的分层结构,然后学习了如何构建镜像,最后实践使用 Docker Hub 和本地 registry. 下面是镜像的常用操作子命令: i ...
- VR全景:电商巨头的角逐
VR全景智慧城市:京东推"京东梦"挑战淘宝Buy+ ,VR购物谁主沉浮? VR全景智慧城市是国内首家商业全景平台,结合先进VR虚拟现实技术,以线下实体为依托,将空间还原到线上,用户 ...
- jsp+servlet实现模糊查询和分页效果
---恢复内容开始--- 1.DAO+MVC包 2.DAO接口方法定义 package com.wanczy.dao; import java.math.BigDecimal;import java. ...
- 使用jedis实现Redis消息队列(MQ)的发布(publish)和消息监听(subscribe)
前言: 本文基于jedis 2.9.0.jar.commons-pool2-2.4.2.jar以及json-20160810.jar 其中jedis连接池需要依赖commons-pool2包,json ...
- SQL Server使用导入导出向导导入超过4000个字符的字段的数据
在使用SQL Server导入导出向导导入数据的时候,我们经常会碰到某个单元格的数据超长而被截断报错的情况.本文针对这种场景给出相应的解决方案. 环境描述:SQL Server 2012,文件源: ...
- 织梦dedecms单标签、双标签
标签是dedecms的核心,dedecms的标签也跟html标签一样,同样分单标签和双标签. 我不会讲单标签有那些,双标签有那些,也不会叫大家去背那些是单标签,那些是双标签.如果去背这些标签,这样学起 ...
- TIOBE:全球编程语言最新排名(Kotlin排名进入前50名)
作为coder,大家当然关心自己所使用语言的应用趋势.要是几年后所用语言变得默默无闻,那岂不是之前的知识储备与经验积累都会大打折扣.TIOBE排行榜是根据互联网上有经验的程序员.课程和第三方厂商的数量 ...