zoukankan      html  css  js  c++  java
  • 【hdu 2571 命运 (动态规划)】ACM程序设计期末考试081230

    命运

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 4192    Accepted Submission(s): 1482


    Problem Description
    穿过幽谷意味着离大魔王lemon已经无限接近了!
    可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个机关。要知道,不论何人,若在迷宫中被困1小时以上,则必死无疑!
    可怜的yifenfei为了去救MM,义无返顾地跳进了迷宫。让我们一起帮帮执着的他吧!
    命运大迷宫可以看成是一个两维的方格阵列,如下图所示:
     
    yifenfei一开始在左上角,目的当然是到达右下角的大魔王所在地。迷宫的每一个格子都受到幸运女神眷恋或者痛苦魔王的诅咒,所以每个格子都对应一个值,走到那里便自动得到了对应的值。
    现在规定yifenfei只能向右或者向下走,向下一次只能走一格。但是如果向右走,则每次可以走一格或者走到该行的列数是当前所在列数倍数的格子,即:如果当前格子是(x,y),下一步可以是(x+1,y),(x,y+1)或者(x,y*k) 其中k>1。 
    为了能够最大把握的消灭魔王lemon,yifenfei希望能够在这个命运大迷宫中得到最大的幸运值。
     
    Input
    输入数据首先是一个整数C,表示测试数据的组数。
    每组测试数据的第一行是两个整数n,m,分别表示行数和列数(1<=n<=20,10<=m<=1000);
    接着是n行数据,每行包含m个整数,表示n行m列的格子对应的幸运值K ( |k|<100 )。
     
    Output
    请对应每组测试数据输出一个整数,表示yifenfei可以得到的最大幸运值。
     
    Sample Input
    1 3 8 9 10 10 10 10 -10 10 10 10 -11 -1 0 2 11 10 -20 -11 -11 10 11 2 10 -10 -10
     
    Sample Output
    52
     
    Author
    yifenfei
     
    Source
     
    Recommend
    yifenfei
     
     
     
     1 #include <iostream>
     2 using namespace std;
     3 
     4 #define MAXN 25
     5 #define MAXM 1010
     6 
     7 typedef long long int longint;
     8 
     9 int iMap[MAXN][MAXM]; /* using 1 - n ,, 1 - m to store data ... you know the rule.*/
    10 
    11 int n, m;
    12 
    13 longint MIN_NUMBER = -1 << 31;
    14 
    15 bool iHeadOfLine(int x, int y)
    16 {
    17     return y == 1 ? true : false;
    18 }
    19 
    20 void iInit()
    21 {
    22     cin >> n >> m;
    23 
    24     for (int i = 1; i <= n; i++)
    25     {
    26         for (int j = 1; j <= m; j++)
    27         {
    28             cin >> iMap[i][j];
    29         }
    30     }
    31 
    32     for (int j = 0; j <= m; j++)
    33     {
    34         iMap[0][j] = MIN_NUMBER;
    35     }
    36 
    37     for (int i = 0; i <= n; i++)
    38     {
    39         iMap[i][0] = MIN_NUMBER;
    40     }
    41     iMap[1][0] = 0;
    42     iMap[0][1] = 0;
    43 }
    44 
    45 void iDynamicProgramming()
    46 {
    47     for (int i = 1; i <= n; i++)
    48     {
    49         for (int j = 1; j <= m; j++)
    50         {
    51             int iMax;
    52             iMax = iMap[i][j-1];
    53             if (iMax < iMap[i-1][j])
    54             {
    55                 iMax = iMap[i-1][j];
    56             }
    57 
    58             for (int k = 1; k < j; k++)
    59             {
    60                 if (j % k == 0)
    61                 {
    62                     if (iMax < iMap[i][k])
    63                     {
    64                         iMax = iMap[i][k];
    65                     }
    66                 }
    67             }
    68 
    69             iMap[i][j] += iMax;
    70         }
    71     }
    72 }
    73 
    74 void iShowResult()
    75 {
    76     cout << iMap[n][m] << endl;
    77 }
    78 
    79 
    80 int main()
    81 {
    82     int t;
    83     cin >> t;
    84 
    85     while (t--)
    86     {
    87         iInit();
    88 
    89         iDynamicProgramming();
    90 
    91         iShowResult();
    92 
    93     }
    94 
    95     return 0;
    96 }
    97 
    98 // end
    99 // ism
  • 相关阅读:
    爬取中华网科技新闻
    爬取斗鱼图片
    链表09-开发可用链表(将链表变为对象数组)
    链表08-开发可用链表(数据删除)
    链表07-开发可用链表(修改指定索引内容)
    链表06-开发可用链表(根据索引取得数据)
    链表05-开发可用链表(判断某一个数据是否存在)
    链表05-开发可用链表(判断是否为空链表)
    链表04-开发可用链表(取得链表中保存的元素个数)
    链表03-开发可用链表(实现数据增加)
  • 原文地址:https://www.cnblogs.com/ismdeep/p/2602416.html
Copyright © 2011-2022 走看看