Labyrinth

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

Problem 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
 
题意:从左上走到右上,且只能往上、下、右方向走,问最多能有多少金币。
 
思路:每一列的每一个格子,都有从上走到或者从下走到,根据这两个状态可以往右推一个状态。每次往右推一个数,就更新最新列的从上推和从下推两个状态
 
 
思维挺巧妙的。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define INF -10000000
int mapp[][];
int dp[][][]; int main()
{
int t,cnt=;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=; i<=n; i++)
for(int j=; j<=m; j++)
scanf("%d",&mapp[i][j]);
for(int i=;i<;i++)
for(int j=;j<;j++)
for(int k=;k<;k++)
dp[i][j][k]=INF;
dp[][][]=;
for(int i=;i<=n;i++)
dp[][i][]=dp[][i][]=dp[][i-][]+mapp[i][];
for(int j=;j<=m;j++)
for(int i=;i<=n;i++)
{
dp[][i][j]=dp[][i][j]=max(dp[][i][j-],dp[][i][j-])+mapp[i][j];
for(int k=i;k<=n;k++)
dp[][k][j]=max(dp[][k][j],dp[][k-][j]+mapp[k][j]);
for(int k=i;k>=;k--)
dp[][k][j]=max(dp[][k][j],dp[][k+][j]+mapp[k][j]);
}
printf("Case #%d:\n%d\n",++cnt,max(dp[][][m],dp[][][m]));
}
return ;
}

HDU_4826_dp的更多相关文章

随机推荐

  1. Kruscal算法

    Kruscal算法也是最小生成树算法,这个算法感觉起来可能更直观一点,我们要求最小生成树,我们可以依次找图中的最小权重所在的边,只要这些边不构成回路就添加,知道覆盖所有的顶点. 算法的具体过程: 1. ...

  2. iOS xmpp协议实现聊天之openfire的服务端配置(二)

    本篇主要说一下怎样利用命令行来正确配置MySql. 首先打开终端: 1.为mysql起一个别名 alias mysql=/usr/local/mysql/bin/mysql 2.创建mysql的管理员 ...

  3. Linux ANSI 乱码问题

    原帖http://blog.chinaunix.net/u/24624/showart_184609.html Windows 到 linux 解决samba-3.x客户端中文乱码问题 dos cha ...

  4. jquery 1.9以上新版本不支持toggle()的解决方法

    原文:http://blog.csdn.net/u011061889/article/details/50397462 参考: http://www.cnblogs.com/lionden/archi ...

  5. 喷水装置(一)(南阳oj6)(简单贪心)

    喷水装置(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描写叙述 现有一块草坪,长为20米.宽为2米.要在横中心线上放置半径为Ri的喷水装置.每一个喷水装置的效果都会让 ...

  6. js滚轮换切屏

    因为全项目不是自己写的,仅仅是帮别人写js滚轮代码,并且别人项目也还未上线.所以仅仅贴出自己写的那段部分代码, 效果:鼠标滚轮滚动时.网頁屏幕一屏一屏的上下切换 (下面代码在本地电脑的IE,chrom ...

  7. C++ Sleep Function 使用方法 Sleep(-1)

    <span style="font-size:18px;">//==================================================== ...

  8. javascript 变量声明 和 作用域

    变量的声明 1.变量声明具有提升机制,Javascript在执行时,会把所有的声明都提升到当前作用域前面. 先看一下下面的例子: (function(){ alert(b)//b is not def ...

  9. srm 539

    http://mlz000.github.io/2015/07/15/srm-539/ 250 Description: 从若干个盒子中随意选择几个装石头.每一个盒子容量都有上下限,一旦选择使用某个盒 ...

  10. whl 安装

    pymssql 安装 C:\Users\sas>pip install d:\pymssql--cp36-cp36m-win_amd64.whl Processing d:\pymssql--c ...