滑雪(ski)
滑雪(ski)
题目描述
Michael喜欢滑雪。这并不奇怪,因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道在一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。
输入
第1行为表示区域的二维数组的行数R和列数C(1≤R,C≤l00)。下面是R行,每行有C个数,代表高度。
输出
输出区域中最长滑坡的长度。
样例输入
- 5 5
- 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
样例输出
- 25
提示
一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可行的滑坡为24-17-16-1(从24开始,在l结束)。当然25-24-23-…-3-2-1更长。事实上,这是最长的一条。
分析:可以按权值从小到大遍历点(贪心),另一种思路是直接记忆化,貌似记忆化更快。。。
代码:
- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <cmath>
- #include <algorithm>
- #include <climits>
- #include <cstring>
- #include <string>
- #include <set>
- #include <map>
- #include <queue>
- #include <stack>
- #include <vector>
- #include <list>
- #include <ext/rope>
- #define rep(i,m,n) for(i=m;i<=n;i++)
- #define rsp(it,s) for(set<int>::iterator it=s.begin();it!=s.end();it++)
- #define vi vector<int>
- #define pii pair<int,int>
- #define mod 1000000007
- #define inf 0x3f3f3f3f
- #define pb push_back
- #define mp make_pair
- #define fi first
- #define se second
- #define ll long long
- #define pi acos(-1.0)
- const int maxn=1e2+;
- const int dis[][]={{,},{-,},{,-},{,}};
- using namespace std;
- using namespace __gnu_cxx;
- ll gcd(ll p,ll q){return q==?p:gcd(q,p%q);}
- ll qpow(ll p,ll q){ll f=;while(q){if(q&)f=f*p;p=p*p;q>>=;}return f;}
- int n,m,a[maxn][maxn],ma,vis[maxn][maxn];
- set<pair<int,pii> >q;
- int main()
- {
- int i,j,k,t;
- scanf("%d%d",&n,&m);
- rep(i,,n-)rep(j,,m-)scanf("%d",&a[i][j]),q.insert(mp(a[i][j],mp(i,j)));
- for(auto x:q)
- {
- int val=x.fi,l=x.se.fi,r=x.se.se;
- vis[l][r]=;
- for(int i=;i<;i++)
- {
- int xx=l+dis[i][],yy=r+dis[i][];
- if(xx>=&&xx<n&&yy>=&&yy<m&&vis[xx][yy]&&a[xx][yy]<a[l][r])
- {
- vis[l][r]=max(vis[l][r],vis[xx][yy]+);
- }
- }
- ma=max(ma,vis[l][r]);
- }
- printf("%d\n",ma);
- //system ("pause");
- return ;
- }
记忆化:
- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <cmath>
- #include <algorithm>
- #include <cstring>
- #include <stack>
- #include <cctype>
- #include <queue>
- #include <string>
- #include <vector>
- #include<functional>
- #include <set>
- #include <map>
- #include <climits>
- #define lson root<<1,l,mid
- #define rson root<<1|1,mid+1,r
- #define fi first
- #define se second
- #define ping(x,y) ((x-y)*(x-y))
- #define mst(x,y) memset(x,y,sizeof(x))
- #define mcp(x,y) memcpy(x,y,sizeof(y))
- using namespace std;
- #define gamma 0.5772156649015328606065120
- #define MOD 1000000007
- #define inf 0x3f3f3f3f
- #define N 30005
- #define maxn 100005
- typedef pair<int,int> PII;
- typedef long long LL;
- int n,m;
- int dp[][];
- int a[][];
- int dir[][]={{,},{-,},{,},{,-}};
- int dfs(int x,int y){
- if(dp[x][y]!=-)return dp[x][y];
- for(int i=;i<;++i){
- int xx=x+dir[i][];
- int yy=y+dir[i][];
- if(xx<||xx>n||yy<||yy>m)continue;
- if(a[xx][yy]<a[x][y]){
- dp[x][y]=max(dp[x][y],+dfs(xx,yy));
- }
- }
- return dp[x][y]=max(dp[x][y],);
- }
- int main(){
- //freopen("in.txt","r",stdin);
- int i,j;
- while(scanf("%d%d",&n,&m)!=EOF){
- for(i=;i<=n;++i)
- for(j=;j<=m;++j)
- scanf("%d",&a[i][j]);
- mst(dp,-);
- for(i=;i<=n;++i)for(j=;j<=m;++j)if(dp[i][j]==-)dp[i][j]=dfs(i,j);
- int ans=-;
- for(i=;i<=n;++i)for(j=;j<=m;++j)ans=max(ans,dp[i][j]);
- printf("%d\n",ans);
- }
- return ;
- }
滑雪(ski)的更多相关文章
- ImageNet2017文件下载
ImageNet2017文件下载 文件说明 imagenet_object_localization.tar.gz包含训练集和验证集的图像数据和地面实况,以及测试集的图像数据. 图像注释以PASCAL ...
- ImageNet2017文件介绍及使用
ImageNet2017文件介绍及使用 文件说明 imagenet_object_localization.tar.gz包含训练集和验证集的图像数据和地面实况,以及测试集的图像数据. 图像注释以PAS ...
- [USACO09OPEN]滑雪课Ski Lessons
题目描述 Farmer John wants to take Bessie skiing in Colorado. Sadly, Bessie is not really a very good sk ...
- 【USACO2009 Open】滑雪课程ski
[USACO2009 Open]滑雪课程 Ski Lessons Time Limit: 1000 ms Memory Limit: 131072 KBytes Description 约翰请贝西去科 ...
- 译:滑雪租赁问题(ski rental problem)
本文翻译自维基百科词条:http://en.wikipedia.org/wiki/Ski_rental_problem 滑雪租赁问题(ski rental problem)是一类问题的总称, ...
- 洛谷 P3650 [USACO1.3]滑雪课程设计Ski Course Design
P3650 [USACO1.3]滑雪课程设计Ski Course Design 题目描述 农民约翰的农场里有N座山峰(1<=N<=1000),每座山都有一个在0到100之间的整数的海拔高度 ...
- [USACO2009 OPEN] 滑雪课 Ski Lessons
洛谷P2948 看到题目就觉得这是动规但一直没想到如何状态转移……看了别人的题解之后才有一些想法 f[i][j]:前i单位时间能力值为j可以滑的最多次数 lessons[i][j]:结束时间为i,获得 ...
- LGOJ3101 [USACO14JAN]滑雪等级Ski Course Rating
LGOJ3101 [USACO14JAN]滑雪等级Ski Course Rating [问题描述] The cross-country skiing course at the winter Mool ...
- BZOJ 1571: [Usaco2009 Open]滑雪课Ski
Description Farmer John 想要带着 Bessie 一起在科罗拉多州一起滑雪.很不幸,Bessie滑雪技术并不精湛. Bessie了解到,在滑雪场里,每天会提供S(0<=S& ...
随机推荐
- window2008 64位系统无法调用Microsoft.Office.Interop组件进行文件另存的解决办法
生成execl时遇到的问题: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005 ...
- ios简单更改系统TabBar的高度
- (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; CGRect frame = self.tabBar.frame; fra ...
- Chapter 1 First Sight——35
The final bell rang at last. I walked slowly to the office to return my paperwork. 最后下课铃响了.我走到了办公室上讲 ...
- hdu_5763_Another Meaning(dp)
题目链接:hdu_5763_Another Meaning 题意: 一个文本串A,一个模式串B,如果文本串含有模式串B,那么就能组合成多种意思,如下: In the first case, “ heh ...
- debian上安装lua编辑器
Debian服务器上安装lua 1)下载压缩包 wget http://www.lua.org/ftp/lua-5.1.4.tar.gz 2)解压文件 tar zxvf lua-5.1.4.tar. ...
- Long-Polling, Websockets, SSE(Server-Sent Event), WebRTC 之间的区别
在下面的示例中,客户端指的是浏览器,服务器指的是网站服务器主机. 为了更好的理解这些知识点,你应该简单了解典型的http网站是如何工作的. 普通的http: 客户端从服务器端请求网页 服务器作出相应的 ...
- php常用命令大全
1.php -v 查看版本号 [root@rs-2 lib]# php -v PHP 5.5.11 (cli) (built: Apr 29 2014 12:35:52) Copyrigh ...
- Head First - 01.策略模式(Strategy Pattern)
策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 当你需要给朋友留下深刻印象,或是影响关键主管的决策时,请使用“这个”定义! 设计原则: 1.找出 ...
- and的用法(&)
经常看到jq的源码中各种&连接在一起赋值一个变量, 例一: var b = a&&a.getName 例二: var b = a&&a.getName||d 例 ...
- typeof判断类型(数组类型得用instanceof)
var a= 1; console.log(typeof a); var b= '1'; console.log(typeof b); var c; console.log(typeof c); va ...