题目:http://acm.hdu.edu.cn/showproblem.php?pid=2391

题目大意:给定一个矩阵,从左上角第一个元素开始到右下最后一个元素,寻找一条路线,使得路线经过的矩阵元素之和加起来最大,路线的方向可以向右→,可以向下↓,也可以斜向右下(只有在矩阵元素有负数的时候,斜向右下的方向才有必要考虑,本题可以考虑这一点,但是没有必要)

有两种方法可以求解

方法一:动态规划

循环地针对矩阵每一个元素,求出,在目前情况下从起点到当前点的所有路线中,使得元素的最大和,并以这个最大值来更新当前位置的数值,待所有元素值更新结束之后,最后一个元素的值就是所求的最大值.

以题目中的测试数据为例,动态规划过程如下(从左向右,从上往下)

最后结果是42.

C++代码如下

#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std; int main()
{
int T,r,c;
cin >> T;//测试的组数
for(int k=1;k<=T;k++)
{
cin >> r >> c;//矩阵的行数r和列数c
int ** a = new int* [r+1];//处于代码需要,数组大小比矩阵多一行一列,第一行第一列一直是0. for(int i=0;i<=r;i++)//从0到r行
{
a[i] = new int[c+1];
for(int j=0;j<=c;j++)//从0到c列
a[i][j] = 0;//所有元素都初始化为0
} for(int i=1;i<=r;i++)//从1到r行
for(int j=1;j<=c;j++)//从1到c列
cin >> a[i][j]; for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
a[i][j] += max(a[i-1][j],a[i][j-1]);//从i-1和j-1可以看出,数组比矩阵多一行,多一列. //注意每一组的测试数据的结果之间有空行.
cout << "Scenario #" << k << ":" << endl << a[r][c] << endl << endl;
} return 0;
}

上述代码提交可以通过.

方法二:递归的方法

下面的代码测试数据通过,但是提交会超时(递归的原因?)

#include<iostream>
#include<algorithm>
using namespace std; int f(int **a,int r,int c,int x,int y)//递归函数
{
//x,y是起点下标
if(r-x==2 || c-y==2) //递归边界:起点在倒数第二行倒数第二列的位置
return a[x][y] + max(a[x+1][y],a[x][y+1]) + a[r-1][c-1];
else//递归:当前的位置的值 + max(以右边一个点为起点的结果,以下边的一个点为起点的结果)
return a[x][y] + max(f(a,r,c,x+1,y),f(a,r,c,x,y+1));
} int main()
{
int T,r,c;
cin >> T;
for(int k=1;k<=T;k++)
{
cin >> r >> c;
int ** a = new int*[r+1];
for(int i=0;i<r;i++)
{
a[i] = new int[c+1];
for(int j=0;j<c;j++)
cin >> a[i][j];
}
cout << "Scenario #" << k << ":" << endl << f(a,r,c,0,0) << endl << endl;
} return 0;
}

【hdoj_2391】FilthyRich的更多相关文章

  1. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  2. 【原】谈谈对Objective-C中代理模式的误解

    [原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...

  3. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  4. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  5. 【调侃】IOC前世今生

    前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...

  6. Python高手之路【三】python基础之函数

    基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...

  7. Python高手之路【一】初识python

    Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...

  8. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】

    说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...

  9. 【原】FMDB源码阅读(二)

    [原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...

随机推荐

  1. JavaScript定义类的方式与其它OO语言有些差异

    JavaScript面向对象的程序编写与其它OO语言有一些出入,所以使用JavaScript的面向对象特性的时候,需要注意一些规范性的问题.下面就简单地谈一下,JavaScript如何定义一个类,在定 ...

  2. 使用 html2canvas 实现浏览器截图

    基于上一篇<h5 本地上传图片预览 源码下载>,今天分享一个图片上传后, 根据所上传的图片颜值随机生成一个答案, 并且可以生成一张专属于自己的名片. 首先上传预览我们已经实现了, 所以接下 ...

  3. js的作用域深入理解

    一.什么是作用域 作用域是指对某一变量和方法具有访问权限的代码空间,Javascript的作用域只有两种:全局作用域和本地作用域,本地作用域是按照函数来区分的(即全局变量和局部变量)) 局部变量:只有 ...

  4. UVA 1649 Binomial coefficients

    https://vjudge.net/problem/UVA-1649 题意: 输入m,求所有的C(n,k)=m m<=1e15 如果枚举n,那么C(n,k)先递增后递减 如果枚举k,那么C(n ...

  5. 验证组件——FluentValidation

          FluentValidation FluentValidation是与ASP.NET DataAnnotataion Attribute验证实体不同的数据验证组件,提供了将实体与验证分离开 ...

  6. 【BZOJ3875】【AHOI2014】骑士游戏 [Spfa][DP]

    骑士游戏 Time Limit: 30 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 在这个游戏中,JYY一共有两种攻击 ...

  7. Vue.js最佳实践(五招让你成为Vue.js大师)

    对大部分人来说,掌握Vue.js基本的几个API后就已经能够正常地开发前端网站.但如果你想更加高效地使用Vue来开发,成为Vue.js大师,那下面我要传授的这五招你一定得认真学习一下了. 第一招:化繁 ...

  8. POJ 3279 Fliptile ( 开关问题)

    题目链接 Description Farmer John knows that an intellectually satisfied cow is a happy cow who will give ...

  9. hdu 1200 To and Fro(简单模拟或DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1200 To and Fro Time Limit: 2000/1000 MS (Java/Others ...

  10. Perl6 Bailador框架(2):路径设置

    use v6; use Bailador; =begin pod get表示是get发送 post表示是post发送 get/post 后面的 '/name' 表示是路径 => sub {} 是 ...