Description

度度熊是一只喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫只能从矩阵左上角第一个方格开始走,只有走到右上角的第一个格子才算走出迷宫,每一次只能走一格,且只能向上向下向右走以前没有走过的格子,每一个格子中都有一些金币(或正或负,有可能遇到强盗拦路抢劫, 度度熊身上金币可以为负,需要给强盗写欠条),度度熊刚开始时身上金币数为0,问度度熊走出迷宫时候身上最多有多少金币?

Input

输入的第一行是一个整数T(T < 200),表示共有T组数据。

每组数据的第一行输入两个正整数m,n(m<=100,n<=100)。接下来的m行,每行n个整数,分别代表相应格子中能得到金币的数量,每个整数都大于等于-100且小于等于100。

Output

对于每组数据,首先需要输出单独一行”Case #?:”,其中问号处应填入当前的数据组数,组数从1开始计算。

每组测试数据输出一行,输出一个整数,代表根据最优的打法,你走到右上角时可以获得的最大金币数目。

Sample Input

2
3 4
1 -1 1 0
2 -2 4 2
3 5 1 -90
2 2
1 1
1 1

Sample Output

Case #1:
18
Case #2:
4 非常简单的dp,首先分析状态,第一列的状态是确定的,只能从上一气走到下。那么从第二列往后呢?
不难发现,第二列往后的位置ans[i][j]的值有3种情况,从左,下,上三个方向分别到达该点。我们在这里定义两个dp[i][j]一个来保存从上走到下,另一个保存从下走到上的最大值,
在这两个dp中分别更新从前一列走还是从上(或下)最优,然后取个max就行了!
代码如下:
 #include <bits/stdc++.h>

 using namespace std;
int t,n,m,mapp[][],dp1[][],dp2[][],ans[][];
int main()
{
//freopen("de.txt","r",stdin);
scanf("%d",&t);
int casee=;
while (t--)
{ scanf("%d%d",&n,&m);
printf("Case #%d:\n",++casee);
for (int i=;i<=n;++i)
{
for (int j=;j<=m;++j)
scanf("%d",&mapp[i][j]);
}
ans[][]=mapp[][];
for (int i=;i<=n;++i)
ans[i][]=ans[i-][]+mapp[i][];
for (int j=;j<=m;++j)
{
dp1[][j]=ans[][j-]+mapp[][j];
for (int i=;i<=n;++i)
dp1[i][j]=max(dp1[i-][j],ans[i][j-])+mapp[i][j];
dp2[n][j]=ans[n][j-]+mapp[n][j];
for (int i=n-;i>=;--i)
dp2[i][j]=max(dp2[i+][j],ans[i][j-])+mapp[i][j];
for (int i=;i<=n;++i)
ans[i][j]=max(dp1[i][j],dp2[i][j]);
}
printf("%d\n",ans[][m]);
/*
for (int i=1;i<=n;++i)
{
for (int j=1;j<=m;++j)
printf("%d ",ans[i][j]);
printf("\n");
}*/
}
return ;
}
 

hdu 4826 Labyrinth(简单dp)的更多相关文章

  1. hdu 4826 Labyrinth DP

    题目链接:HDU - 4826 度度熊是一只喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫只能从矩阵左上角第一个方格开始走,只有走到右上角的第一个格子才算走出迷宫,每一次只能走一格,且只能向 ...

  2. hdu 4576 (简单dp+滚动数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4576 题意:给出1~n的环,m个操作,每次能顺时针或逆时针走w步,询问最后在l~r这段区间内概率.(1 ...

  3. HDU 2836 Traversal 简单DP + 树状数组

    题意:给你一个序列,问相邻两数高度差绝对值小于等于H的子序列有多少个. dp[i]表示以i为结尾的子序列有多少,易知状态转移方程为:dp[i] = sum( dp[j] ) + 1;( abs( he ...

  4. 百度之星资格赛 hdu 4826 Labyrinth 动态规划

    /********************* Problem Description 是一仅仅喜欢探险的熊.一次偶然落进了一个m*n矩阵的迷宫,该迷宫仅仅能从矩阵左上角第一个方格開始走,仅仅有走到右上 ...

  5. hdu 5569 matrix(简单dp)

    Problem Description Given a matrix with n rows and m columns ( n+m ,) and you want to go to the numb ...

  6. hdu 2128 Frog(简单DP)

    Frog Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submi ...

  7. hdu 4826(dp + 记忆化搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4826 思路:dp[x][y][d]表示从方向到达点(x,y)所能得到的最大值,然后就是记忆化了. #i ...

  8. HDU 1087 简单dp,求递增子序列使和最大

    Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  9. hdu 2471 简单DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2571 简单dp, dp[n][m] +=(  dp[n-1][m],dp[n][m-1],d[i][k ...

随机推荐

  1. Mybatis原理及源码分析

    什么是Mybatis? Mybatis是一个半自动化的持久层框架. Mybatis可以将向PreparedStatement中的输入参数自动进行映射(输入映射),将结果集映射成Java对象(输出映射) ...

  2. ldd3 第12章 PCI驱动程序

    PCI接口 PCI寻址 引导阶段 配置寄存器和初始化 MODULE_DEVICE_TABLE 注册PCI驱动程序 佬式PCI探测 激活PCI设备 访问配置空间 访问I/O和内存空间 PCI中断 硬件抽 ...

  3. 「长乐集训 2017 Day8」修路 (斯坦纳树)

    题目描述 村子间的小路年久失修,为了保障村子之间的往来,AAA君决定带领大家修路. 村子可以看做是一个边带权的无向图GGG, GGG 由 nnn 个点与 mmm 条边组成,图中的点从 1∼n1 \si ...

  4. git私立的代码库邀请合作者步骤

    第一步,点击setting,如下图: 第二步输入对方的用户名,点击添加. 第三步拷贝链接给对方,等待对方访问加入. 对方访问后可以看到: 加入就可以了 然后对方可以看到:

  5. fiddler使用笔记1

    转载地址:写得很不错的fildder教程   http://kb.cnblogs.com/page/130367/ Fiddler的基本介绍 Fiddler的官方网站:  www.fiddler2.c ...

  6. JavaScript 中的dispatchEvent是怎么用的

    https://zhidao.baidu.com/question/1859896201945858587.html https://www.cnblogs.com/playerlife/archiv ...

  7. hbase centos7 安装体验

    1. 准备需要jdk1.8,hbase安装文件.大家可以官网下载. 解压文件,复制到指定目录 tar -zxvf  jdk-8u201-linux-x64.tar.gz tar -zxvf  hbas ...

  8. 【一起学源码-微服务】Nexflix Eureka 源码三:EurekaServer启动之EurekaServer上下文EurekaClient创建

    前言 上篇文章已经介绍了 Eureka Server 环境和上下文初始化的一些代码,其中重点讲解了environment初始化使用的单例模式,以及EurekaServerConfigure基于接口对外 ...

  9. QTP调用.net Framework类库实例

    1. 日期时间格式处理 set oDate = DotNetFactory.CreateInstance("System.DateTime").Parse("2-18-2 ...

  10. grep与egrep命令

    greo -E 等同于 egrep grep常用两种方式 1.   grep -c python a.txt 2.   cat a.txt | grep -c python a.txt文件如下 i l ...