zoukankan      html  css  js  c++  java
  • ACM-HDU2571 命运

    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
     
    分析:DP求解(求从左上角走到右下角的最大值),递推公式为:dp[i][j] = max(dp[i-1][j],dp[i][j-1],dp[i][k]) + data[i][j]。其中dp[i][j]表示男主角到达第i行第j列所能达到的幸运值的最大值。data[i][j]表示第i行第j列的幸运值。其中 k为j的真因子。(找真因子,包括1,即找除本身以外的其他约数,因为题目存在 "每次可以走一格或者走到该行的列数是当前所在列数倍数的格子" 这样的条件)
     
     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 using namespace std;
     5 
     6 const int maxn = 21;
     7 const int maxm = 1000;
     8 const int inf = -101;
     9 
    10 int dp[maxn][maxn];
    11 int data[maxm][maxm];
    12 
    13 int n,m;
    14 
    15 void calc()
    16 {
    17     int i,j,k;
    18 
    19     dp[0][1] = 0;
    20     dp[1][0] = 0;
    21 
    22     for(i = 1;i <= n;++i)
    23     {
    24         for(j = 1;j <= m;++j)
    25         {
    26             int temp = inf;
    27             for(k = 1;k < j;++k)
    28             {
    29                 if(j % k == 0)
    30                     temp = max(temp,dp[i][k]);
    31             }
    32             temp = max(temp,dp[i-1][j]);
    33             temp = max(temp,dp[i][j-1]);
    34 
    35             dp[i][j] = data[i][j] + temp;
    36         }
    37     }
    38 }
    39 int main()
    40 {
    41     int N;
    42     int i,j;
    43     while(cin >> N)
    44     {
    45         memset(dp,0,sizeof(dp));
    46         cin >>n>>m;
    47         for(i = 1;i <= n;++i)
    48         {
    49             for(j = 1;j <= m;++j)
    50             {
    51                 cin>>data[i][j];
    52             }
    53         }
    54         calc();
    55         cout<<dp[n][m]<<endl;
    56     }
    57 }
    View Code
  • 相关阅读:
    How to install VXDIAG Honda, Toyota and JLR SDD software
    16% off MPPS V16 ECU tuning tool for EDC15 EDC16 EDC17
    Cummins INSITE locked and ask for verification code
    How to use BMW Multi Tool 7.3 to replace lost key for BMW X1
    Bleed Brake Master Cylinder with Intelligent Tester IT2
    Porsche Piwis Tester II “No VCI has been detected”,how to do?
    Creader VIII VS. Creader VII+
    How to solve GM MDI cannot complete the installation
    汽车OBD2诊断程序开发 (原文转载,思路很清晰!)
    汽车节温器单片机开发思路
  • 原文地址:https://www.cnblogs.com/sxmcACM/p/4821386.html
Copyright © 2011-2022 走看看