Description

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

Input

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

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

Output

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

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

Sample Input

  1. 2
  2. 3 4
  3. 1 -1 1 0
  4. 2 -2 4 2
  5. 3 5 1 -90
  6. 2 2
  7. 1 1
  8. 1 1

Sample Output

  1. Case #1:
  2. 18
  3. Case #2:
  4. 4
  5.  
  6. 非常简单的dp,首先分析状态,第一列的状态是确定的,只能从上一气走到下。那么从第二列往后呢?
    不难发现,第二列往后的位置ans[i][j]的值有3种情况,从左,下,上三个方向分别到达该点。我们在这里定义两个dp[i][j]一个来保存从上走到下,另一个保存从下走到上的最大值,
    在这两个dp中分别更新从前一列走还是从上(或下)最优,然后取个max就行了!
    代码如下:
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. int t,n,m,mapp[][],dp1[][],dp2[][],ans[][];
  5. int main()
  6. {
  7. //freopen("de.txt","r",stdin);
  8. scanf("%d",&t);
  9. int casee=;
  10. while (t--)
  11. {
  12.  
  13. scanf("%d%d",&n,&m);
  14. printf("Case #%d:\n",++casee);
  15. for (int i=;i<=n;++i)
  16. {
  17. for (int j=;j<=m;++j)
  18. scanf("%d",&mapp[i][j]);
  19. }
  20. ans[][]=mapp[][];
  21. for (int i=;i<=n;++i)
  22. ans[i][]=ans[i-][]+mapp[i][];
  23. for (int j=;j<=m;++j)
  24. {
  25. dp1[][j]=ans[][j-]+mapp[][j];
  26. for (int i=;i<=n;++i)
  27. dp1[i][j]=max(dp1[i-][j],ans[i][j-])+mapp[i][j];
  28. dp2[n][j]=ans[n][j-]+mapp[n][j];
  29. for (int i=n-;i>=;--i)
  30. dp2[i][j]=max(dp2[i+][j],ans[i][j-])+mapp[i][j];
  31. for (int i=;i<=n;++i)
  32. ans[i][j]=max(dp1[i][j],dp2[i][j]);
  33. }
  34. printf("%d\n",ans[][m]);
  35. /*
  36. for (int i=1;i<=n;++i)
  37. {
  38. for (int j=1;j<=m;++j)
  39. printf("%d ",ans[i][j]);
  40. printf("\n");
  41. }*/
  42. }
  43. return ;
  44. }
  1.  

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. myeclipse svn重新定位 本地文件 svn 重新定位

    我们在用工具myeclipse开发项目时,当资源库存储空间不够时,我们就需要添加资源库,涉及到我们切换项目资源库,下面就介绍一下svn资源库重新定位步骤 1,window到show view到othe ...

  2. centos挂载移动硬盘ntfs-3g

    yum install ntfs-3g sudo mount -t ntfs-3g /dev/sdc1 /mnt/mobiledisk https://tuxera.com/opensource/nt ...

  3. Windows-菜单太长点不到

    显示设置里显示器方向调整成纵向

  4. 【Angular】No component factory found for ×××.

    报错现象: 用modal打开某个组件页面时报错 报错:No component factory found for UpdateAuthWindowComponent. Did you add it ...

  5. HttpCanary——最强Android抓包工具!

    迎使用HttpCanary——最强Android抓包工具! HttpCanary是一款功能强大的HTTP/HTTPS/HTTP2网络包抓取和分析工具,你可以把他看成是移动端的Fiddler或者Char ...

  6. kubernetes安装部署

    1.根据系统内核情况,选择对应的ali云上的镜像,作为仓库的路径指向来配置k8s https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes- ...

  7. spring boot 尚桂谷学习笔记04 ---Web开始

    ------web开发------ 1.创建spring boot 应用 选中我们需要的模块 2.spring boot 已经默认将这些场景配置好了 @EnableAutoConfiguration ...

  8. c#生成html静态文件时出现空白行,怎么去掉utf-8中的bom

    public static void UTF8RemoveBOM(string filepath) { UTF8RemoveBOM(filepath, filepath); }   public st ...

  9. HDU 1577 WisKey的眼神

    WisKey的眼神 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  10. bzoj2521 [Shoi2010]最小生成树

    [Shoi2010]最小生成树 Time Limit: 10 Sec Memory Limit: 128 MB Description Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出 ...