hdu 4826 Labyrinth(简单dp)
Description
Input
每组数据的第一行输入两个正整数m,n(m<=100,n<=100)。接下来的m行,每行n个整数,分别代表相应格子中能得到金币的数量,每个整数都大于等于-100且小于等于100。
Output
每组测试数据输出一行,输出一个整数,代表根据最优的打法,你走到右上角时可以获得的最大金币数目。
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)的更多相关文章
- hdu 4826 Labyrinth DP
题目链接:HDU - 4826 度度熊是一只喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫只能从矩阵左上角第一个方格开始走,只有走到右上角的第一个格子才算走出迷宫,每一次只能走一格,且只能向 ...
- hdu 4576 (简单dp+滚动数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4576 题意:给出1~n的环,m个操作,每次能顺时针或逆时针走w步,询问最后在l~r这段区间内概率.(1 ...
- HDU 2836 Traversal 简单DP + 树状数组
题意:给你一个序列,问相邻两数高度差绝对值小于等于H的子序列有多少个. dp[i]表示以i为结尾的子序列有多少,易知状态转移方程为:dp[i] = sum( dp[j] ) + 1;( abs( he ...
- 百度之星资格赛 hdu 4826 Labyrinth 动态规划
/********************* Problem Description 是一仅仅喜欢探险的熊.一次偶然落进了一个m*n矩阵的迷宫,该迷宫仅仅能从矩阵左上角第一个方格開始走,仅仅有走到右上 ...
- 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 ...
- hdu 2128 Frog(简单DP)
Frog Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submi ...
- hdu 4826(dp + 记忆化搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4826 思路:dp[x][y][d]表示从方向到达点(x,y)所能得到的最大值,然后就是记忆化了. #i ...
- HDU 1087 简单dp,求递增子序列使和最大
Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- 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 ...
随机推荐
- Mybatis原理及源码分析
什么是Mybatis? Mybatis是一个半自动化的持久层框架. Mybatis可以将向PreparedStatement中的输入参数自动进行映射(输入映射),将结果集映射成Java对象(输出映射) ...
- ldd3 第12章 PCI驱动程序
PCI接口 PCI寻址 引导阶段 配置寄存器和初始化 MODULE_DEVICE_TABLE 注册PCI驱动程序 佬式PCI探测 激活PCI设备 访问配置空间 访问I/O和内存空间 PCI中断 硬件抽 ...
- 「长乐集训 2017 Day8」修路 (斯坦纳树)
题目描述 村子间的小路年久失修,为了保障村子之间的往来,AAA君决定带领大家修路. 村子可以看做是一个边带权的无向图GGG, GGG 由 nnn 个点与 mmm 条边组成,图中的点从 1∼n1 \si ...
- git私立的代码库邀请合作者步骤
第一步,点击setting,如下图: 第二步输入对方的用户名,点击添加. 第三步拷贝链接给对方,等待对方访问加入. 对方访问后可以看到: 加入就可以了 然后对方可以看到:
- fiddler使用笔记1
转载地址:写得很不错的fildder教程 http://kb.cnblogs.com/page/130367/ Fiddler的基本介绍 Fiddler的官方网站: www.fiddler2.c ...
- JavaScript 中的dispatchEvent是怎么用的
https://zhidao.baidu.com/question/1859896201945858587.html https://www.cnblogs.com/playerlife/archiv ...
- hbase centos7 安装体验
1. 准备需要jdk1.8,hbase安装文件.大家可以官网下载. 解压文件,复制到指定目录 tar -zxvf jdk-8u201-linux-x64.tar.gz tar -zxvf hbas ...
- 【一起学源码-微服务】Nexflix Eureka 源码三:EurekaServer启动之EurekaServer上下文EurekaClient创建
前言 上篇文章已经介绍了 Eureka Server 环境和上下文初始化的一些代码,其中重点讲解了environment初始化使用的单例模式,以及EurekaServerConfigure基于接口对外 ...
- QTP调用.net Framework类库实例
1. 日期时间格式处理 set oDate = DotNetFactory.CreateInstance("System.DateTime").Parse("2-18-2 ...
- grep与egrep命令
greo -E 等同于 egrep grep常用两种方式 1. grep -c python a.txt 2. cat a.txt | grep -c python a.txt文件如下 i l ...