zoukankan      html  css  js  c++  java
  • 【noi 2.6_90】滑雪(DP)

    题意:输出最长下降路径的长度。

    解法:f[i][j]表示结尾于(i,j)的最长的长度。由于无法确定4个方位已修改到最佳,所以用递归实现。

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<iostream>
     5 using namespace std;
     6 #define Maxn 110
     7 
     8 int a[Maxn][Maxn],f[Maxn][Maxn];
     9 int n,m;
    10 
    11 int ffind(int i,int j)
    12 {
    13     if (!i || !j || i>n || j>m) return 0;
    14     if (!f[i][j])
    15     {
    16       int x=1;
    17       if (a[i][j]<a[i-1][j]) x=max(x,ffind(i-1,j)+1);
    18       if (a[i][j]<a[i][j-1]) x=max(x,ffind(i,j-1)+1);
    19       if (a[i][j]<a[i+1][j]) x=max(x,ffind(i+1,j)+1);
    20       if (a[i][j]<a[i][j+1]) x=max(x,ffind(i,j+1)+1);
    21       f[i][j]=x;
    22     }
    23     return f[i][j];
    24 }
    25 int main()
    26 {
    27     scanf("%d%d",&n,&m);
    28     for (int i=1;i<=n;i++)
    29      for (int j=1;j<=m;j++)
    30        scanf("%d",&a[i][j]);
    31     memset(f,0,sizeof(f));
    32     int ans=0;
    33     for (int i=1;i<=n;i++)
    34      for (int j=1;j<=m;j++)
    35      {
    36        f[i][j]=ffind(i,j);
    37        ans=max(ans,f[i][j]);
    38      }
    39     printf("%d
    ",ans);
    40     return 0;
    41 }
  • 相关阅读:
    【HDOJ6701】Make Rounddog Happy(启发式合并)
    【HDOJ6731】Angle Beats(极角排序)
    【BZOJ1132】Tro(叉积)
    【CF1236D】Alice and the Doll(set)
    Storm
    Spark
    Python基础(2)
    数据库漫谈
    Python基础(1)
    C/C++链接过程相关
  • 原文地址:https://www.cnblogs.com/konjak/p/5954367.html
Copyright © 2011-2022 走看看