滑雪(ski)

题目描述

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

输入

  第1行为表示区域的二维数组的行数R和列数C(1≤R,C≤l00)。下面是R行,每行有C个数,代表高度。

输出

  输出区域中最长滑坡的长度。

样例输入

  1. 5 5
  2. 1 2 3 4 5
  3. 16 17 18 19 6
  4. 15 24 25 20 7
  5. 14 23 22 21 8
  6. 13 12 11 10 9

样例输出

  1. 25

提示

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

分析:可以按权值从小到大遍历点(贪心),另一种思路是直接记忆化,貌似记忆化更快。。。

代码:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cmath>
  5. #include <algorithm>
  6. #include <climits>
  7. #include <cstring>
  8. #include <string>
  9. #include <set>
  10. #include <map>
  11. #include <queue>
  12. #include <stack>
  13. #include <vector>
  14. #include <list>
  15. #include <ext/rope>
  16. #define rep(i,m,n) for(i=m;i<=n;i++)
  17. #define rsp(it,s) for(set<int>::iterator it=s.begin();it!=s.end();it++)
  18. #define vi vector<int>
  19. #define pii pair<int,int>
  20. #define mod 1000000007
  21. #define inf 0x3f3f3f3f
  22. #define pb push_back
  23. #define mp make_pair
  24. #define fi first
  25. #define se second
  26. #define ll long long
  27. #define pi acos(-1.0)
  28. const int maxn=1e2+;
  29. const int dis[][]={{,},{-,},{,-},{,}};
  30. using namespace std;
  31. using namespace __gnu_cxx;
  32. ll gcd(ll p,ll q){return q==?p:gcd(q,p%q);}
  33. ll qpow(ll p,ll q){ll f=;while(q){if(q&)f=f*p;p=p*p;q>>=;}return f;}
  34. int n,m,a[maxn][maxn],ma,vis[maxn][maxn];
  35. set<pair<int,pii> >q;
  36. int main()
  37. {
  38. int i,j,k,t;
  39. scanf("%d%d",&n,&m);
  40. rep(i,,n-)rep(j,,m-)scanf("%d",&a[i][j]),q.insert(mp(a[i][j],mp(i,j)));
  41. for(auto x:q)
  42. {
  43.  
  44. int val=x.fi,l=x.se.fi,r=x.se.se;
  45. vis[l][r]=;
  46. for(int i=;i<;i++)
  47. {
  48. int xx=l+dis[i][],yy=r+dis[i][];
  49. if(xx>=&&xx<n&&yy>=&&yy<m&&vis[xx][yy]&&a[xx][yy]<a[l][r])
  50. {
  51. vis[l][r]=max(vis[l][r],vis[xx][yy]+);
  52. }
  53. }
  54. ma=max(ma,vis[l][r]);
  55. }
  56. printf("%d\n",ma);
  57. //system ("pause");
  58. return ;
  59. }

记忆化:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cmath>
  5. #include <algorithm>
  6. #include <cstring>
  7. #include <stack>
  8. #include <cctype>
  9. #include <queue>
  10. #include <string>
  11. #include <vector>
  12. #include<functional>
  13. #include <set>
  14. #include <map>
  15. #include <climits>
  16. #define lson root<<1,l,mid
  17. #define rson root<<1|1,mid+1,r
  18. #define fi first
  19. #define se second
  20. #define ping(x,y) ((x-y)*(x-y))
  21. #define mst(x,y) memset(x,y,sizeof(x))
  22. #define mcp(x,y) memcpy(x,y,sizeof(y))
  23. using namespace std;
  24. #define gamma 0.5772156649015328606065120
  25. #define MOD 1000000007
  26. #define inf 0x3f3f3f3f
  27. #define N 30005
  28. #define maxn 100005
  29. typedef pair<int,int> PII;
  30. typedef long long LL;
  31.  
  32. int n,m;
  33. int dp[][];
  34. int a[][];
  35. int dir[][]={{,},{-,},{,},{,-}};
  36. int dfs(int x,int y){
  37. if(dp[x][y]!=-)return dp[x][y];
  38. for(int i=;i<;++i){
  39. int xx=x+dir[i][];
  40. int yy=y+dir[i][];
  41. if(xx<||xx>n||yy<||yy>m)continue;
  42. if(a[xx][yy]<a[x][y]){
  43. dp[x][y]=max(dp[x][y],+dfs(xx,yy));
  44. }
  45. }
  46. return dp[x][y]=max(dp[x][y],);
  47. }
  48.  
  49. int main(){
  50. //freopen("in.txt","r",stdin);
  51. int i,j;
  52. while(scanf("%d%d",&n,&m)!=EOF){
  53. for(i=;i<=n;++i)
  54. for(j=;j<=m;++j)
  55. scanf("%d",&a[i][j]);
  56. mst(dp,-);
  57. for(i=;i<=n;++i)for(j=;j<=m;++j)if(dp[i][j]==-)dp[i][j]=dfs(i,j);
  58. int ans=-;
  59. for(i=;i<=n;++i)for(j=;j<=m;++j)ans=max(ans,dp[i][j]);
  60. printf("%d\n",ans);
  61. }
  62. return ;
  63. }

滑雪(ski)的更多相关文章

  1. ImageNet2017文件下载

    ImageNet2017文件下载 文件说明 imagenet_object_localization.tar.gz包含训练集和验证集的图像数据和地面实况,以及测试集的图像数据. 图像注释以PASCAL ...

  2. ImageNet2017文件介绍及使用

    ImageNet2017文件介绍及使用 文件说明 imagenet_object_localization.tar.gz包含训练集和验证集的图像数据和地面实况,以及测试集的图像数据. 图像注释以PAS ...

  3. [USACO09OPEN]滑雪课Ski Lessons

    题目描述 Farmer John wants to take Bessie skiing in Colorado. Sadly, Bessie is not really a very good sk ...

  4. 【USACO2009 Open】滑雪课程ski

    [USACO2009 Open]滑雪课程 Ski Lessons Time Limit: 1000 ms Memory Limit: 131072 KBytes Description 约翰请贝西去科 ...

  5. 译:滑雪租赁问题(ski rental problem)

         本文翻译自维基百科词条:http://en.wikipedia.org/wiki/Ski_rental_problem 滑雪租赁问题(ski rental problem)是一类问题的总称, ...

  6. 洛谷 P3650 [USACO1.3]滑雪课程设计Ski Course Design

    P3650 [USACO1.3]滑雪课程设计Ski Course Design 题目描述 农民约翰的农场里有N座山峰(1<=N<=1000),每座山都有一个在0到100之间的整数的海拔高度 ...

  7. [USACO2009 OPEN] 滑雪课 Ski Lessons

    洛谷P2948 看到题目就觉得这是动规但一直没想到如何状态转移……看了别人的题解之后才有一些想法 f[i][j]:前i单位时间能力值为j可以滑的最多次数 lessons[i][j]:结束时间为i,获得 ...

  8. LGOJ3101 [USACO14JAN]滑雪等级Ski Course Rating

    LGOJ3101 [USACO14JAN]滑雪等级Ski Course Rating [问题描述] The cross-country skiing course at the winter Mool ...

  9. BZOJ 1571: [Usaco2009 Open]滑雪课Ski

    Description Farmer John 想要带着 Bessie 一起在科罗拉多州一起滑雪.很不幸,Bessie滑雪技术并不精湛. Bessie了解到,在滑雪场里,每天会提供S(0<=S& ...

随机推荐

  1. window2008 64位系统无法调用Microsoft.Office.Interop组件进行文件另存的解决办法

    生成execl时遇到的问题: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005 ...

  2. ios简单更改系统TabBar的高度

    - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; CGRect frame = self.tabBar.frame; fra ...

  3. Chapter 1 First Sight——35

    The final bell rang at last. I walked slowly to the office to return my paperwork. 最后下课铃响了.我走到了办公室上讲 ...

  4. hdu_5763_Another Meaning(dp)

    题目链接:hdu_5763_Another Meaning 题意: 一个文本串A,一个模式串B,如果文本串含有模式串B,那么就能组合成多种意思,如下: In the first case, “ heh ...

  5. 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. ...

  6. Long-Polling, Websockets, SSE(Server-Sent Event), WebRTC 之间的区别

    在下面的示例中,客户端指的是浏览器,服务器指的是网站服务器主机. 为了更好的理解这些知识点,你应该简单了解典型的http网站是如何工作的. 普通的http: 客户端从服务器端请求网页 服务器作出相应的 ...

  7. php常用命令大全

    1.php -v 查看版本号   [root@rs-2 lib]# php -v   PHP 5.5.11 (cli) (built: Apr 29 2014 12:35:52)   Copyrigh ...

  8. Head First - 01.策略模式(Strategy Pattern)

    策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 当你需要给朋友留下深刻印象,或是影响关键主管的决策时,请使用“这个”定义!  设计原则: 1.找出 ...

  9. and的用法(&)

    经常看到jq的源码中各种&连接在一起赋值一个变量, 例一: var b = a&&a.getName 例二: var b = a&&a.getName||d 例 ...

  10. typeof判断类型(数组类型得用instanceof)

    var a= 1; console.log(typeof a); var b= '1'; console.log(typeof b); var c; console.log(typeof c); va ...