思路:d[x][y]表示以(x, y)作为起点能得到的最长递减序列,转移方程d[x][y] = max(d[px][py] + 1),此处(px, py)是它的相邻位置并且该位置的值小于(x, y)处的值。可以选择把所有坐标根据值的大小升序排序,因为值较大的坐标取决于值更小的相邻坐标。

 

AC代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<utility>
#include<string>
#include<iostream>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<stack>
using namespace std;
#define eps 1e-10
#define inf 0x3f3f3f3f
#define PI pair<int, int>
const int maxn = 100 + 5;
int a[100][100];
vector<PI>pos[105];
char s[100];
int n, m, d[maxn][maxn];

const int dx[] = {0,0,-1,1};
const int dy[] = {1,-1,0,0}; 

int solve() {
	int ans = 0;
	for(int i = 0; i <= 100; ++i) {
		int len = pos[i].size();
		for(int j = 0; j < len; ++j) {
			int x = pos[i][j].first, y = pos[i][j].second;
			int v = a[x][y];
			d[x][y] = 1;
			for(int k = 0; k < 4; ++k) {
				int px = x + dx[k], py = y + dy[k];
				if(px < 0 || py < 0 || px >= n || py >= m) continue;
				if(a[px][py] >= a[x][y]) continue;
				d[x][y] = max(d[x][y], d[px][py] + 1);
			}
			ans = max(ans, d[x][y]);
		}
	}
	return ans;
}

int main() {
	int T;
	scanf("%d", &T);
	while(T--) {
		for(int i = 0; i <= 100; ++i) pos[i].clear();
		scanf("%s%d%d", s, &n, &m);
		for(int i = 0; i < n; ++i)
			for(int j = 0; j < m; ++j) {
				scanf("%d", &a[i][j]);
				pos[ a[i][j] ].push_back(make_pair(i, j));
			}
		printf("%s: %d\n", s, solve());
	}
	return 0;
}

如有不当之处欢迎指出!

UVA - 10285 Longest Run on a Snowboard (线性DP)的更多相关文章

  1. UVA 10285 - Longest Run on a Snowboard (记忆化搜索+dp)

    Longest Run on a Snowboard Input: standard input Output: standard output Time Limit: 5 seconds Memor ...

  2. UVA 10285 Longest Run on a Snowboard(记忆化搜索)

    Problem C Longest Run on a Snowboard Input: standard input Output: standard output Time Limit: 5 sec ...

  3. UVa 10285 Longest Run on a Snowboard - 记忆化搜索

    记忆化搜索,完事... Code /** * UVa * Problem#10285 * Accepted * Time:0ms */ #include<iostream> #includ ...

  4. UVa 10285 Longest Run on a Snowboard【记忆化搜索】

    题意:和最长滑雪路径一样, #include<iostream> #include<cstdio> #include<cstring> #include <c ...

  5. UVa 10285 - Longest Run on a Snowboard

    称号:给你一个二维矩阵,找到一个点.每一个可以移动到的位置相邻的上下,求最长单调路径. 分析:贪婪,dp.搜索. 这个问题是一个小样本,我们该怎么办. 这里使用贪心算法: 首先.将全部点依照权值排序( ...

  6. UVA - 10285 Longest Run on a Snowboard(最长的滑雪路径)(dp---记忆化搜索)

    题意:在一个R*C(R, C<=100)的整数矩阵上找一条高度严格递减的最长路.起点任意,但每次只能沿着上下左右4个方向之一走一格,并且不能走出矩阵外.矩阵中的数均为0~100. 分析:dp[x ...

  7. 【UVA】10285-Longest Run on a Snowboard(动态规划)

    这是一个简单的问题.你并不需要打印路径. 状态方程dp[i][j] = max(dp[i-1][j],dp[i][j-1],dp[i+1][j],dp[i][j+1]); 14003395 10285 ...

  8. [动态规划]UVA10285 - Longest Run on a Snowboard

    Problem C Longest Run on a Snowboard Input: standard input Output: standard output Time Limit: 5 sec ...

  9. 【Uva 10285】Longest Run on a Snowboard

    [Link]: [Description] 在一个r*c的格子上; 求最长的下降路径; [Solution] 记忆化搜索; f[x][y]表示从(x,y)这个格子往下还能走多远; 因为是严格递增,所以 ...

随机推荐

  1. 使用非java代码编程

    使用非JAVA代码     JAVA语言及其标准API(应用程序编程接口)应付应用程序的编写已绰绰有余.但在某些情况下,还是必须使用非JAVA编码.例如,我们有时要访问操作系统的专用特性,与特殊的硬件 ...

  2. nc简单应用

    传输本地文件test到172.19.135.12: 172.19.135.12接收端 nc -l   1234 > test 本地为  发送端 nc  172.19.135.12  1234 & ...

  3. js按位运算符及其妙用

    大多数语言都提供了按位运算符,恰当的使用按位运算符有时候会取得的很好的效果. 在我看来按位运算符应该有7个: 1.& 按位与 &是二元运算符,它以特定的方式的方式组合操作数中对应的位, ...

  4. JAVA并发编程学习笔记------对象的可见性及发布逸出

    一.非原子的64位操作: 当线程在没有同步的情况下读取变量时,可能会得到一个失效值,但至少这个值是由之前某个线程设置的值,而不是一个随机值,这种安全性保证被称为最低安全性.最低安全性适用于绝大多数变量 ...

  5. redis基础知识

    特点 内存+磁盘的持久化保存 具有非常丰富的数据类型,尤其擅长数组类数据的高速度处理 数据快照 自带的主从复制 丰富的数据类型 字符串 链表 集合 有序集合 散列表 适用场景 时间线应用 得益于链表的 ...

  6. iOS-打电话、发短信、发邮件【指定QQ用户发送QQ消息】

    1.发短信 头文件 #import <MessageUI/MessageUI.h> 头部代理 @interface ViewController ()<MFMessageCompos ...

  7. 浏览器通过file://访问文件和通过http://访问文件有什么区别

    1.file协议用于访问本地计算机中的文件,就如同在Windows资源管理器中打开文件一样,注意它是针对本地(本机)的,简单来说,file协议是访问你本机的文件资源.http访问本地HTML,是在本地 ...

  8. Spring mybatis源码学习指引目录

    前言: 分析了很多方面的mybatis的源码以及与spring结合的源码,但是难免出现错综的现象,为了使源码陶冶更为有序化.清晰化,特作此随笔归纳下分析过的内容.博主也为mybatis官方提供过pul ...

  9. Spring整合JMS(四)——事务管理

    原文链接:http://haohaoxuexi.iteye.com/blog/1983532 Spring提供了一个JmsTransactionManager用于对JMS ConnectionFact ...

  10. 夏令营讲课内容整理 Day 4.

    本日主要内容就是搜索(打暴力 搜索可以说是OIer必会的算法,同时也是OI系列赛事常考的算法之一. 有很多的题目都可以通过暴力搜索拿到部分分,而在暴力搜索的基础上再加一些剪枝优化, 就有可能会拿到更多 ...