UVa 10285 - Longest Run on a Snowboard

简介:

称号:给你一个二维矩阵,找到一个点。每一个可以移动到的位置相邻的上下,求最长单调路径。

分析:贪婪,dp。搜索。

这个问题是一个小样本,我们该怎么办。

            这里使用贪心算法:

            首先。将全部点依照权值排序(每一个点一定被值更大的点更新);

            然后,按顺序更新排序后。每一个点更新周围的点;

            最后,找到最大值输出就可以。

说明:╮(╯▽╰)╭居然拍了1000+,还以为这样的方法比較快呢(数据分布啊╮(╯▽╰)╭)。

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstdio>

using namespace std;

typedef struct nodep
{
	int value,x,y;
}point;
point now,Node[10004];

char buf[256];
int  maps[102][102];
int  imap[102][102];
int  dmap[102][102];

int cmp1( point a, point b )
{
	return a.value > b.value;
}

int cmp2( point a, point b )
{
	return a.value < b.value;
}

int main()
{
	int T,R,C,dxy[4][2] = {1,0,0,1,-1,0,0,-1};
	while ( ~scanf("%d",&T) )
	while ( T -- ) {
		scanf("%s%d%d",buf,&R,&C);
		int count = 0;
		for ( int i = 1 ; i <= R ; ++ i )
		for ( int j = 1 ; j <= C ; ++ j ) {
			scanf("%d",&maps[i][j]);
			imap[i][j] = dmap[i][j] = 1;
			Node[count].value = maps[i][j];
			Node[count].x = i;
			Node[count].y = j;
			count ++;	
		}
		
		sort( Node, Node+count, cmp1 );
		for ( int i = 0 ; i < count ; ++ i ) {
			for ( int j = 0 ; j < 4 ; ++ j ) {
				now.x = Node[i].x+dxy[j][0];
				now.y = Node[i].y+dxy[j][1];
				if ( now.x >= 1 && now.x <= R && now.y >= 1 && now.y <= C ) {
					if ( maps[now.x][now.y] < maps[Node[i].x][Node[i].y] )
					if ( dmap[now.x][now.y] < dmap[Node[i].x][Node[i].y]+1 ) 
						dmap[now.x][now.y] = dmap[Node[i].x][Node[i].y]+1;
				}
			}
		}
		sort( Node, Node+count, cmp1 );
		for ( int i = 0 ; i < count ; ++ i ) {
			for ( int j = 0 ; j < 4 ; ++ j ) {
				now.x = Node[i].x+dxy[j][0];
				now.y = Node[i].y+dxy[j][1];
				if ( now.x >= 1 && now.x <= R && now.y >= 1 && now.y <= C ) {
					if ( maps[now.x][now.y] > maps[Node[i].x][Node[i].y] )
					if ( imap[now.x][now.y] < imap[Node[i].x][Node[i].y]+1 ) 
						imap[now.x][now.y] = imap[Node[i].x][Node[i].y]+1;
				}
			}
		}
		
		int max = 0;
		for ( int i = 1 ; i <= R ; ++ i )
		for ( int j = 1 ; j <= C ; ++ j ) {
			if ( max < imap[i][j] )
				max = imap[i][j];
			if ( max < dmap[i][j] )
				max = dmap[i][j];
		}
				
		printf("%s: %d\n",buf,max);
	}
	return 0;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。




本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4646440.html,如需转载请自行联系原作者


相关文章
|
SQL 关系型数据库 数据库
SqlAlchemy 2.0 中文文档(三十八)(4)
SqlAlchemy 2.0 中文文档(三十八)
183 0
|
敏捷开发 架构师 Devops
开放下载!《阿里巴巴 DevOps 实践手册》
覆盖 DevOps 演进史、核心理念与阿里巴巴 DevOps 最佳实践的全方位解析手册,揭开阿里巴巴高效研发的秘密!
60385 1
开放下载!《阿里巴巴 DevOps 实践手册》
|
机器学习/深度学习 人工智能 自然语言处理
【大模型】大语言模型前沿技术系列讲座-学习笔记1:人工智能发展史
【大模型】大语言模型前沿技术系列讲座-学习笔记1:人工智能发展史
|
存储 算法 Java
java树和图相关的算法:二叉树遍历、深度优先搜索、广度优先搜索等
树和图相关的算法:二叉树遍历、深度优先搜索、广度优先搜索等
240 0
|
人工智能 安全 物联网
移动应用与系统的融合创新:未来智能生活的关键
【4月更文挑战第13天】随着科技的飞速发展,移动应用开发和移动操作系统已成为现代生活的重要组成部分。本文将深入探讨移动应用与系统的最新技术趋势,以及它们如何共同推动智能生活的发展。我们将分析移动应用开发的关键技术,如跨平台开发、人工智能和物联网,并探讨移动操作系统的未来发展方向,如安全性、性能优化和用户体验。通过这些技术的融合创新,我们可以预见一个更加便捷、高效和智能的未来。
208 4
|
机器学习/深度学习 运维 监控
什么是用户实体行为分析(UEBA)
数字新时代正在加速全面到来,网络环境变得更加多元、人员变得更复杂、接入方式多种多样,网络边界逐渐模糊甚至消失,同时伴随着企业数据的激增。数字化转型促进组织的业务发展的同时,也带来了重大的网络安全挑战。安全是人和人攻防对抗的游戏,一切的意图都需要通过行为表达,这是安全运营中最重要也最有价值的一块拼图,同时也是传统方式最欠缺的。针对传统方式的不足,安全行业逐步加强基于大数据驱动,机器学习、概率分析、模式识别等的以“行为”为核心的检测分析。 用户实体行为分析(UEBA)应运而生。
2940 1
codeblocks中出现#error This file requires compiler and library support for the错误时的解决方案
codeblocks中出现#error This file requires compiler and library support for the错误时的解决方案
1017 0
codeblocks中出现#error This file requires compiler and library support for the错误时的解决方案
|
机器学习/深度学习 数据采集 搜索推荐
【数据挖掘实战】——家用电器用户行为分析及事件识别(BP神经网络)
项目地址:Datamining_project: 数据挖掘实战项目代码
1727 0
|
数据采集 安全 测试技术
如何http代理(proxy)配置到指纹浏览器使用?
今天我将和大家分享如何将HTTP代理(或称为代理服务器)配置到指纹浏览器中使用。在网络上进行浏览和访问时,我们经常需要保护隐私和实现身份匿名化。
|
敏捷开发 运维 监控
金融行业DevOps案例分享
以某证券行业DevOps实际需求为例,对金融行业研发模式、架构特点梳理,分享解决方案的核心要素
881 0