滑雪

 

背景 Background
成成第一次模拟赛 第三道
 
描述 Description
    trs喜欢滑雪。他来到了一个滑雪场,这个滑雪场是一个矩形,为了简便,我们用r行c列的矩阵来表示每块地形。为了得到更快的速度,滑行的路线必须向下倾斜。
    例如样例中的那个矩形,可以从某个点滑向上下左右四个相邻的点之一。例如24-17-16-1,其实25-24-23…3-2-1更长,事实上这是最长的一条。
 
输入格式 InputFormat
输入文件

第1行: 两个数字r,c(1<=r,c<=100),表示矩阵的行列。
第2..r+1行:每行c个数,表示这个矩阵。

 
输出格式 OutputFormat
输出文件

仅一行: 输出1个整数,表示可以滑行的最大长度。

 
样例输入 SampleInput [复制数据]

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

 

样例输出 SampleOutput [复制数据]

25

 

题解:

     读完题第一个想法是记忆化搜索,据网上一些大牛介绍此方法可以AC。但思考了一段时间,发现可以转化为动态规划问题,这样会更简单,效率也很高。主要思路如下:

1.把二维矩阵拉成线性。用一个一维数组记录矩阵中所有数据a[i],另两个一维数组b[i],c[i]分别记录数据的X,Y坐标。

2.a[i]从小到大排序,b[i],c[i]跟随排序。

3.现在求最长路径就转化成了求该一维数组a[i]的最长上升子序列。这里要特别注意状态转移的条件。即a[i]、a[j]在矩阵中必须相邻,即abs(xi-xj)=1 && yi=yj或者 xi=xj &&abs(yi-yj)=1。 

4.最后最长上升子序列的长度就是可以滑行的最大长度。

代码:

  1. #include<stdio.h>
  2. #include<math.h>
  3. int
  4. r,c1,i,j,n,num=,maxx=,a[],b[],c[],f[];
  5. int
  6. max(int a,int b)
  7. {
  8. if (a>b) return(a);
  9. else return(b);
  10. }
  11.  
  12. void
  13. qsort(int head,int tail)
  14. {
  15. int i,j,x,y,z;
  16. i=head;j=tail;
  17. x=a[head];y=b[head];z=c[head];
  18. while(i<j)
  19. {
  20. while((i<j)&&(a[j]>=x)) j--;
  21. a[i]=a[j];b[i]=b[j];c[i]=c[j];
  22. while((i<j)&&(a[i]<=x)) i++;
  23. a[j]=a[i];b[j]=b[i];c[j]=c[i];
  24. }
  25. a[i]=x;b[i]=y;c[i]=z;
  26. if (head<(i-)) qsort(head,i-);
  27. if ((i+)<tail) qsort(i+,tail);
  28. }
  29. int
  30. check(int x1,int y1,int x2, int y2)
  31. {
  32. int p,q;
  33. p=abs(x1-x2);
  34. q=abs(y1-y2);
  35. if ((p==)&&(y1==y2)) return ;
  36. if ((x1==x2)&&(q==)) return ;
  37. return ;
  38. }
  39.  
  40. int
  41. main(void)
  42. {
  43. int x;
  44. scanf("%d%d\n",&r,&c1);
  45. for(i=;i<=r;i++)
  46. for (j=;j<=c1;j++)
  47. {
  48. scanf("%d",&x);
  49. num++;
  50. a[num]=x;
  51. b[num]=i;
  52. c[num]=j;
  53. }
  54. n=num;
  55.  
  56. qsort(,n);
  57.  
  58. for (i=;i<=n;i++) f[i]=;
  59.  
  60. for (i=;i<=n;i++)
  61. for (j=;j<i;j++)
  62. {
  63. if ((a[j]<a[i])&&(check(b[j],c[j],b[i],c[i])==))
  64. f[i]=max(f[i],f[j]+);
  65. if (f[i]>maxx) maxx=f[i];
  66. }
  67. printf("%d\n",maxx);
  68. return ;
  69. }

[TYVJ] P1004 滑雪的更多相关文章

  1. TYVJ P1004 滑雪 Label:记忆化搜索

    背景 成成第一次模拟赛 第三道 描述     trs喜欢滑雪.他来到了一个滑雪场,这个滑雪场是一个矩形,为了简便,我们用r行c列的矩阵来表示每块地形.为了得到更快的速度,滑行的路线必须向下倾斜.    ...

  2. tyvj 1004 滑雪 记忆化搜索

    滑雪 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://www.tyvj.cn/p/1004 Description     trs喜欢滑雪.他来 ...

  3. 修炼dp( 2 )

    P1084 数字三角形4 题解:dp+dfs. #include <iostream> #include <cstdio> #include <algorithm> ...

  4. [codevs2152]滑雪

    题目来源 http://www.tyvj.cn/p/1004 http://www.luogu.org/problem/show?pid=1434# http://codevs.cn/problem/ ...

  5. [BZOJ3223]Tyvj 1729 文艺平衡树

    [BZOJ3223]Tyvj 1729 文艺平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区 ...

  6. [BZOJ3224]Tyvj 1728 普通平衡树

    [BZOJ3224]Tyvj 1728 普通平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个) ...

  7. BZOJ3223: Tyvj 1729 文艺平衡树 [splay]

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3595  Solved: 2029[Submit][Sta ...

  8. BZOJ 3224: Tyvj 1728 普通平衡树

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 9629  Solved: 4091[Submit][Sta ...

  9. BZOJ 3223: Tyvj 1729 文艺平衡树

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3628  Solved: 2052[Submit][Sta ...

随机推荐

  1. 转:Reddit排名算法工作原理

    http://www.aqee.net/how-reddit-ranking-algorithms-work/ 这是一篇继<Hacker News 排名算法工作原理>之后的又一篇关于排名算 ...

  2. Latch-up 閂鎖效應 & 靜電放電模式

    * * Latch-up 閂鎖效應, 又稱寄生PNPN效應或可控矽整流器 ( SCR, Silicon Controlled Rectifier ) 效應. 在整體矽的CMOS 管下, 不同極性攙雜的 ...

  3. Web模板大全

    http://www.dede58.com/a/free/ http://down.admin5.com/moban/109507.html http://www.chinaz.com/ http:/ ...

  4. union all合并记录

    SQL> SELECT empno AS 编码, ename AS 名称, nvl(mgr, deptno) AS 上级编码 FROM emp 2 order by empno 3 UNION ...

  5. 再造轮子之网易彩票-第一季(IOS 篇 by sixleaves)

    前言 在网上看了别人做的模仿网易彩票的项目, 于是也跟着用自己的想法做了一篇.写这篇博客的目的, 在于UI综合的一次小练习, 同时总结和串联其各个控件之间的应用.封装思想等.考虑到有人上不了githu ...

  6. Java Fuck Bignumber

    为了熟悉java , 开一套poj大数处理的题来写. ------------------------------------------------------------------- A: (1 ...

  7. mook_百度百科

    mook_百度百科 mook

  8. HHKB Professional 2

    今天买了一副号称程序员专用的静电容键盘 HHBK Pro2无刻版,简单上手了一下,确实名不虚传,打起字来酣畅淋漓,毫不拖泥带水,感觉自己的技术提高了不少呢!!!! 由于是无刻版,需要一些时间来适应,尤 ...

  9. python学习之路-4 内置函数和装饰器

    本篇涉及内容 内置函数 装饰器 内置函数 callable()   判断对象是否可以被调用,返回一个布尔值 1 2 3 4 5 6 7 8 9 10 11 num = 10 print(callabl ...

  10. Java单元测试:@BeforeClass,@Before,@Test,@After,@AfterClass中的问题详解

    在Junit4中还有的测试注解有:  @BeforeClass ,@Before,@Test,@After,@AfterClass 1.其中:@BeforeClass,@AfterClass是Juni ...