• hdu--2571--dp


    Ah...day by day...

    今天 看到公公建立个新生 程序群 想起了去年夏天 自己刚刚得知是计科的时候 的 一片茫然。。

    记得 去看了视频学了下C 发现太难了啊 又去学了下java 发现还是java的入门比C简单啊。。。

    反正 现在快忘光了 =-=

    我只想和学弟学妹们说:  慢慢来 不用急着问 哪本书适合入门 It's a long long road

    -----------------------

    还是喜欢讲点碎碎念 发牢骚=-=、

    这题 要是让我很久前做肯定以为是dfs的...

    这题 其实和数塔什么的都有一点共同之处的。。

    dp[ i ][ j ] += max( dp[ i-1 ] [ j ] , dp[ i ] [ j-1 ] , dp [ i , j*k ] )...至于边界处理 这边就不注明了 反正这个状态方程就是本题的核心

    一开始 想先A掉 开了2个数组 方便理解   后来 就用了一个数组

    反正 每道题自己能做到如何优化 就尽量优化它 要是遇到 数据太大嘛。。

     1 #include <iostream>
     2 #include <algorithm>
     3 using namespace std;
     4 
     5 const int inf = -0x3f3f3f3f;
     6 int maze[25][1010];
     7 int dp[25][1010];
     8 
     9 int main()
    10 {
    11     int t , n , m;
    12     while( cin >> t )
    13     {
    14         while( t-- )
    15         {
    16             cin >> n >> m;
    17             for( int i = 1 ; i<=n ; i++ )
    18             {
    19                 for( int j = 1 ; j<=m ; j++ )
    20                 {
    21                     cin >> maze[i][j];
    22                 }
    23             }
    24             for( int i = 0 ; i<=n ; i++ )
    25                 dp[i][0] = inf;
    26             for( int j = 0 ; j<=m ; j++ )
    27                 dp[0][j] = inf;
    28             dp[0][1] = dp[1][0] = 0;
    29             for( int i = 1 ; i<=n ; i++ )
    30             {
    31                 for( int j = 1 ; j<=m ; j++ )
    32                 {
    33                     dp[i][j] = max( dp[i-1][j] , dp[i][j-1] );
    34                     for( int k = 1 ; k<j ; k++ )
    35                     {
    36                         if( j%k==0 )
    37                             dp[i][j] = max( dp[i][j] , dp[i][k] );
    38                     }
    39                     dp[i][j] += maze[i][j];
    40                 }
    41             }
    42             cout << dp[n][m] << endl;
    43         }
    44     }
    45     return 0;
    46 }
    View Code
     1 #include <iostream>
     2 #include <algorithm>
     3 using namespace std;
     4 
     5 const int inf = -0x3f3f3f3f;
     6 int dp[25][1010];
     7 
     8 int main()
     9 {
    10     int t , n , m , temp;
    11     while( cin >> t )
    12     {
    13         while( t-- )
    14         {
    15             cin >> n >> m;
    16             for( int i = 1 ; i<=n ; i++ )
    17             {
    18                 for( int j = 1 ; j<=m ; j++ )
    19                 {
    20                     cin >> dp[i][j];
    21                 }
    22             }
    23             for( int i = 1 ; i<=n ; i++ )
    24             {
    25                 for( int j = 1 ; j<=m ; j++ )
    26                 {
    27                     temp = inf;
    28                     if( i==1 && j==1 )
    29                         continue;
    30                     else if( i>=2 && j==1 )
    31                         temp = max( temp , dp[i-1][j] );
    32                     else if( i==1 && j>=2 )
    33                         temp = max( temp , dp[i][j-1] );
    34                     else
    35                         temp = max( dp[i-1][j] , dp[i][j-1] );
    36                     for( int k = 1 ; k<j ; k++ )
    37                     {
    38                         if( j%k==0 )
    39                             temp = max( temp , dp[i][k] );
    40                     }
    41                     dp[i][j] += temp;
    42                 }
    43             }
    44             cout << dp[n][m] << endl;
    45         }
    46     }
    47     return 0;
    48 }
    View Code

    today:

      同学聚会 才过了一年 大家就默契地定在了宾馆下的酒店 =-=

    just follow your heart
  • 相关阅读:
    连续型随机变量
    离散型随机变量
    vue1.0生命周期
    vue2.0生命周期函数
    vue2.0 vue.set()
    vue2.0 vue.extend()的拓展
    vue2.0 自定义指令详解
    vue2.0 v-model指令
    vue2.0排序应该注意的问题
    vue2.0版本指令v-if与v-show的区别
  • 原文地址:https://www.cnblogs.com/radical/p/3890486.html
Copyright © 2020-2023  润新知