zoukankan      html  css  js  c++  java
  • 一道算法题—平安果

    1. 简要描述: 
    2. 给定一个M行N列的矩阵(M*N个格子),每个格子中放着一定数量的平安果。 
    3. 你从左上角的各自开始,只能向下或者向右走,目的地是右下角的格子。 
    4. 每走过一个格子,就把格子上的平安果都收集起来。求你最多能收集到多少平安果。 
    5. 注意:当经过一个格子时,需要一次性把格子里的平安果都拿走。 
    6. 限制条件:1<N,M<=50;每个格子里的平安果数量是0到1000(包含0和1000). 
    7.  
    8. 输入描述: 
    9. 输入包含两部分: 
    10. 第一行M, N 
    11. 接下来M行,包含N个平安果数量 
    12.  
    13. 输出描述: 
    14. 一个整数 
    15. 最多拿走的平安果的数量 
    16.  
    17. 示例: 
    18.  
    19. 输入 
    20. 2 4 
    21. 1 2 3 40 
    22. 6 7 8 90 
    23.  
    24. 输出 
    25. 136 
    26. */  
    27.  1 #include <vector>  
       2 #include <iostream>  
       3 using namespace std;  
       4   
       5 //一道简单的dp问题  
       6 int main()  
       7 {  
       8 #if 1  
       9     freopen("in.txt", "r", stdin);  
      10 #endif  
      11     int m, n;  
      12     while(cin >> m >> n)  
      13     {  
      14         vector<vector<int>> ivec(m, vector<int>(n));  
      15         for(int i = 0; i < m; ++i)  
      16         {  
      17             for(int j = 0; j < n; ++j)  
      18             {  
      19                 cin >> ivec[i][j];  
      20             }  
      21         }  
      22         vector<vector<int>> dp(ivec);  
      23         //--------预处理  
      24         //初始化dp第一列  
      25         for(int i = 1; i < m; ++i)  
      26         {  
      27             dp[i][0] += dp[i - 1][0];  
      28         }  
      29         //初始化dp第一行  
      30         for(int j = 1; j < n; ++j)  
      31         {  
      32             dp[0][j] += dp[0][j - 1];  
      33         }  
      34         //计算dp的其他部分  
      35         for(int i = 1; i < m; ++i)  
      36         {  
      37             for(int j = 1; j < n; ++j)  
      38             {  
      39                 //原始dp[i][j]==ivec[i][j],所以这里没有另外再加+ivec[i][j]  
      40                 dp[i][j] += (dp[i - 1][j] < dp[i][j - 1]) ? dp[i][j - 1] : dp[i - 1][j];  
      41             }  
      42         }  
      43         cout << dp[m - 1][n - 1] << endl;  
      44     }  
      45     return 0;  
      46 } 

       1 // 递归求解
       2 //int getAppleIn(vector<vector<int> >& ivec, int m, int n, int row, int col)  
       3 //{  
       4 //  if(row >= m||col >= n)  
       5 //  {  
       6 //      return 0;  
       7 //  }  
       8 //  else if(row == m - 1)  
       9 //  {  
      10 //      int sum = 0;  
      11 //      for(int i = col; i < n; ++i)  
      12 //      {  
      13 //          sum += ivec[row][i];  
      14 //      }  
      15 //      return sum;  
      16 //  }  
      17 //  else if(col == n - 1)  
      18 //  {  
      19 //      int sum = 0;  
      20 //      for(int i = row; i < m; ++i)  
      21 //      {  
      22 //          sum += ivec[i][col];  
      23 //      }  
      24 //      return sum;  
      25 //  }  
      26 //  else  
      27 //  {  
      28 //      int sum = ivec[row][col];  
      29 //      int sum1 = getAppleIn(ivec, m, n, row + 1, col);  
      30 //      int sum2 = getAppleIn(ivec, m, n, row, col + 1);  
      31 //      return sum + (sum1 < sum2 ? sum2 : sum1);  
      32 //  }  
      33 //}  
      34 //  
      35 //int getApple(vector<vector<int> >& ivec, int m, int n)  
      36 //{  
      37 //  int sum = getAppleIn(ivec, m, n, 0, 0);  
      38 //  return sum;  
      39 //}  
      40 //  
      41 //int main()  
      42 //{  
      43 //#if 1  
      44 //  freopen("in.txt", "r", stdin);  
      45 //#endif  
      46 //  int m, n;  
      47 //  vector<vector<int>> ivec;  
      48 //  while(cin >> m >> n)  
      49 //  {  
      50 //      for(int i = 0; i < m; ++i)  
      51 //      {  
      52 //          vector<int> tem;  
      53 //          for(int j = 0; j < n; ++j)  
      54 //          {  
      55 //              int num;  
      56 //              cin >> num;  
      57 //              tem.push_back(num);  
      58 //          }  
      59 //          ivec.push_back(tem);  
      60 //      }  
      61 //      int res = getApple(ivec, m, n);  
      62 //      cout << res;  
      63 //  }  
      64 //  return 0;  
      65 //}  

      参考资料:http://blog.csdn.net/lizi_stdio/article/details/76618908

  • 相关阅读:
    如何打日志才能方便排查问题?
    为什么 HashMap 并发时会引起死循环?
    Spring 为什么会有 FactoryBean?
    常用 Git 使用技巧,收藏了~
    Gin中context的使用
    Gin的路由算法
    k8s中的网络通信总结
    k8s架构
    Golang中的值拷贝与引用拷贝
    golang知识要点总结
  • 原文地址:https://www.cnblogs.com/smile233/p/8617526.html
Copyright © 2011-2022 走看看