zoukankan      html  css  js  c++  java
  • ny712 探寻宝藏 ny61 传纸条(1)

    探 寻 宝 藏

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:5
    描述

    传说HMH大沙漠中有一个M*N迷宫,里面藏有许多宝物。某天,Dr.Kong找到了迷宫的地图,他发现迷宫内处处有宝物,最珍贵的宝物就藏在右下角,迷宫的进出口在左上角。当然,迷宫中的通路不是平坦的,到处都是陷阱。Dr.Kong决定让他的机器人卡多去探险。

    但机器人卡多从左上角走到右下角时,只会向下走或者向右走。从右下角往回走到左上角时,只会向上走或者向左走,而且卡多不走回头路。(即:一个点最多经过一次)。当然卡多顺手也拿走沿路的每个宝物。

    Dr.Kong希望他的机器人卡多尽量多地带出宝物。请你编写程序,帮助Dr.Kong计算一下,卡多最多能带出多少宝物。
    输入
    第一行: K 表示有多少组测试数据。
    接下来对每组测试数据:
    第1行: M N
    第2~M+1行: Ai1 Ai2 ……AiN (i=1,…..,m)


    【约束条件】
    2≤k≤5 1≤M, N≤50 0≤Aij≤100 (i=1,….,M; j=1,…,N)
    所有数据都是整数。 数据之间有一个空格。
    输出
    对于每组测试数据,输出一行:机器人卡多携带出最多价值的宝物数
    样例输入
    2
    2 3
    0 10 10
    10 10 80
    3 3
    0 3 9
    2 8 5
    5 7 100
    
    样例输出
    120
    134
    
     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 int d[105][52][52],a[52][52];
     6 int main()
     7 {
     8     int x,i,j,k,t;
     9     int n,m;
    10     scanf("%d",&x);
    11     while(x--)
    12     {
    13         scanf("%d%d",&n,&m);
    14         memset(d,0,sizeof(d));
    15         for(i=1;i<=n;++i)
    16             for(j=1;j<=m;++j)
    17                 scanf("%d",&a[i][j]);
    18         for(k=3;k<n+m;k++)
    19             for(i=1;i<=n;++i)
    20                 for(j=i+1;j<=n;++j) //两条线 一定是一条比两一条的 横坐标要大
    21                 {
    22                     if(k-i<1||k-j<1) //有x+y=k知 y=k-x 故此处控制 列y的范围,下面同理
    23                         break;
    24                     if(k-i>m||k-j>m)
    25                         continue;
    26                     d[k][i][j] = max(max(d[k-1][i-1][j],d[k-1][i-1][j-1]),max(d[k-1][i][j-1],d[k-1][i][j]));
    27                                            //此处是5维的3维简略版,i和j不是坐标,而是两个移动坐标的 横坐标,由于纵坐标与横坐标是
    28                                            //线性函数关系,故可以省略。
    29                     d[k][i][j] +=a[i][k-i]+a[j][k-j];
    30                 }
    31         t=n+m;
    32         d[t][n][n] = max(max(d[t-1][n-1][n],d[t-1][n-1][n-1]),max(d[t-1][n][n-1],d[n-1][n][n]));
    33         printf("%d
    ",d[t][n][n]+a[n][m]);
    34     }
    35     return 0;
    36 }
    37         
  • 相关阅读:
    Spring MVC 核心组件详解
    Spring MVC 入门就这一篇
    Spring 事务解决方案
    【UGUI源码分析】Unity遮罩之Mask详细解读
    游戏开发中不同时区下的时间问题
    ARTS第十三周(阅读Tomcat源码)
    Win10 电脑安装.NET低版本提示“这台计算机中已经安装了 .NET Framwork 4.6.2或版本更高的更新”问题
    Dynamics 365 Setup 提示SqlServer 存在
    Dynamics CRM "Verification of prerequisites for Domain Controller promotion failed. Certificate Server is installed."
    Dynamics CRM
  • 原文地址:https://www.cnblogs.com/lovychen/p/3614443.html
Copyright © 2011-2022 走看看