好久没更新博客了。

校内练习的一道水题

HDU2571 命运。

简单DP。

穿过幽谷意味着离大魔王lemon已经无限接近了!  可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个机关。要知道,不论何人,若在迷宫中被困1小时以上,则必死无疑!  可怜的yifenfei为了去救MM,义无返顾地跳进了迷宫。让我们一起帮帮执着的他吧!  命运大迷宫可以看成是一个两维的方格阵列,如下图所示:    yifenfei一开始在左上角,目的当然是到达右下角的大魔王所在地。迷宫的每一个格子都受到幸运女神眷恋或者痛苦魔王的诅咒,所以每个格子都对应一个值,走到那里便自动得到了对应的值。  现在规定yifenfei只能向右或者向下走,向下一次只能走一格。但是如果向右走,则每次可以走一格或者走到该行的列数是当前所在列数倍数的格子,即:如果当前格子是(x,y),下一步可以是(x+1,y),(x,y+1)或者(x,y*k) 其中k>1。  为了能够最大把握的消灭魔王lemon,yifenfei希望能够在这个命运大迷宫中得到最大的幸运值。

题目很简单,DP方程很显然:

dp[i][j] = max ( dp[i-1][j] , dp[i][j-1] , dp[i][j % k ] ) + data[i][j] )

然而卡了8次提交才过。

除了前几次的提交是忘了改define,以及一些细节问题。。

最后多谢学长的极限数据,发现是在对DP的边界的inf不够大。

我以为 inf = -999 很大了。后来发现如果在DP过程中,除了dp可能会访问到dp[1][0] , dp[0][1]这两个起点,对于dp[i][0] , dp[0][i] 这一行一列也可能访问到。如果inf不够大,可能会错误利用这一行一列进行了dp。。

我以前总不理解为什么别人的题解一言不合放代码说的那么少……现在才明白,当一道程序调试太久之后,已经不想再说点什么了。草草总结,就此煞笔。

代码:

#include<iostream>

#include<cmath>

#include<algorithm>

using namespace std;

// dp[i][j] = max( dp[i-1][j] , dp[i][j-1] , dp[i][ j % k ] ) + data[i][j]

#define maxn 25

#define maxm 1010

#define inf -999999

int dp[maxn][maxm],data[maxn][maxm];

int main()

{

int c ;

cin >> c ;

for( int i = 0 ; i < c ; i++)

{

int n , m ;

cin >> n >> m ;

for( int i = 1 ; i <= n ; i++)

{

for( int j = 1 ; j <= m ; j++)

cin >> data[i][j];

}

for( int i = 0 ; i <=n ; i++)

{

for( int j = 0 ; j <= m ; j++)

dp[i][j] = inf ;

}

dp[1][0]=0,dp[0][1]= 0 ; 

for( int i = 1 ; i <=n; i++)

{

for(int j = 1 ; j<=m ; j++)

{

int temp = inf  ;

for( int k = 1 ; k < j ; k++)

if( j % k == 0 )

temp = max( temp , dp[i][k] );

temp = max ( temp , dp[i-1][j] );

temp = max( temp , dp[i][j-1] ) ;

dp[i][j] = temp + data[i][j] ;

}

}

cout << dp[n][m] << endl ;

}

}

HDU2571 命运 动态规划的更多相关文章

  1. hdu2571 命运 动态规划Dp

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:pid=2571" target="_blank">http://acm. ...

  2. HDU 2571 命运 动态规划

    命运 http://acm.hdu.edu.cn/showproblem.php?pid=2571 Problem Description 穿过幽谷意味着离大魔王lemon已经无限接近了!可谁能想到, ...

  3. HDU-2571命运

    Problem Description 穿过幽谷意味着离大魔王lemon已经无限接近了!可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个机 ...

  4. hdu2571 命运 2016-09-11 16:54 53人阅读 评论(0) 收藏

    命运 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  5. hdu2571 命运 简单DP

    简单dp 状态方程很好想,主要是初始化.... 代码: #include<iostream> #include<cstdlib> #include<cstdio> ...

  6. HDU-2571 命运(搜索,我才不是为了插图呢!哼!)

    看到这题其实感觉就是搜索题,广搜的话看讨论区里已经有人内存超限了,所以我选择了深搜,有两种思路,第一种是从起点出发,依次更新每一个格子的最大值,这样dp[n][m]就是最后的结果了,第二种是从起点试探 ...

  7. HDUOJ----2571(命运)(简单动态规划)

    命运 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  8. 命运(HDU 2571 简单动态规划)

    命运 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  9. HDU2571:命运(DP)

    Problem Description 穿过幽谷意味着离大魔王lemon已经无限接近了! 可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个 ...

随机推荐

  1. 微信内嵌H5网页 解决js倒计时失效

    项目要求:将H5商城页面嵌套到公司微信公众号里 项目本身的开发跟移动端网页并无太多差异,只是这昨天遇到一个问题,说是棘手,到也简单. 用户下单后,在选择支付方式页面,有个倒计时的逻辑(从下单时开始计算 ...

  2. 结构-行为-样式-Js排序算法之 直接插入排序

    最新因工作原因需要接触到算法,之前学习C++的时候有接触过算法,Javascript中实现算法其实也是大同小异.下面我讲下第一个实现的排序算法--直接插入排序.基本实现思路:假定一个数组中前n(n&g ...

  3. C++中的异常

    一,异常的推演 1.函数与异常 平时我们在函数中出现异常情况时通常通过return终止函数并返回一个值,然后在函数上层来获取值并判断是什么异常情况.因为函数是栈结构的,所以return的时候是通过栈结 ...

  4. Java深入研究【1、object类】

    一.概述Object类是所有Java类的祖先.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法. 参考英文:* Class {@code Object} is the ro ...

  5. Entity Framework With Oracle

    参考页面: http://www.yuanjiaocheng.net/Entity/first.html http://www.yuanjiaocheng.net/Entity/jieshao.htm ...

  6. ruby操作mongo DB

    web自动化中,对操作日志功能进行验证(操作日志存在mongoDB中). 为了避免前面操作产生的日志影响结果校验,我们需要先清除之前的所有操作日志. require 'mongo' host = '1 ...

  7. 01--css编码技巧--css揭秘

    一 尽量减少代码重复 1.按钮 #btn { padding: .3em .8em; border: 1px solid #446d88; background: #58a linear-gradie ...

  8. C基于客户端的通信实例

    运行环境liunx 需求:客户端对服务器发送一个TCP连接,连接成功之后发送数据并接收返回数据 代码如下: #include <sys/socket.h> #include <net ...

  9. iOS -不同模拟器字体适配

    1.先建立一个UILabel的分类 导入#import <objc/runtime.h>头文件 2.在.m文件中写入如下代码 //不同设备的屏幕比例(当然倍数可以自己控制) #define ...

  10. Runloop与autoreleasePool联系

    autoreleasePool自动释放池,ARC模式下,苹果会自动进行内存管理,不需要我们手动去管理内存.这对于苹果开发者来说,省去了很多事情,不用再每天为了内存管理浪费掉宝贵的开发时间.大家都知道, ...