P1508 Likecloud-吃、吃、吃

题目背景

问世间,青春期为何物?

答曰:“甲亢,甲亢,再甲亢;挨饿,挨饿,再挨饿!”

题目描述

正处在某一特定时期之中的李大水牛由于消化系统比较发达,最近一直处在饥饿的状态中。某日上课,正当他饿得头昏眼花之时,眼前突然闪现出了一个n*m(n and m<=200)的矩型的巨型大餐桌,而自己正处在这个大餐桌的一侧的中点下边。餐桌被划分为了n*m个小方格,每一个方格中都有一个圆形的巨型大餐盘,上面盛满了令李大水牛朝思暮想的食物。李大水牛已将餐桌上所有的食物按其所能提供的能量打了分(有些是负的,因为吃了要拉肚子),他决定从自己所处的位置吃到餐桌的另一侧,但他吃东西有一个习惯——只吃自己前方或左前方或右前方的盘中的食物。

由于李大水牛已饿得不想动脑了,而他又想获得最大的能量,因此,他将这个问题交给了你。

每组数据的出发点都是最后一行的中间位置的下方!

输入输出格式

输入格式:

[输入数据:]

第一行为m n.(n为奇数),李大水牛一开始在最后一行的中间的下方

接下来为m*n的数字距阵.

共有m行,每行n个数字.数字间用空格隔开.代表该格子上的盘中的食物所能提供的能量.

数字全是整数.

输出格式:

[输出数据:]

一个数,为你所找出的最大能量值.

输入输出样例

输入样例#1:

6 7
16 4 3 12 6 0 3
4 -5 6 7 0 0 2
6 0 -1 -2 3 6 8
5 3 4 0 0 -2 7
-1 7 4 0 7 -5 6
0 -1 3 4 12 4 2
输出样例#1:

41

说明

快吃!快吃!快吃!

坐标类dp。

转移方程:f[i][j] = max(f[i-1][j-1]  ,   f[i-1][j]  ,  f[i-1][j+1]) + g[i][j]

如果不清楚转移顺序可以使用记忆化搜索

一般还是建议用递推,防止爆栈且快速

采用倒推,从第一行开始推,最终答案为max(f[m][n/2],    f[m][n/2 + 1],    f[m][n/2 + 2])

其实有一些常熟优化,只需要考虑一个三角形状的数组即可,存的时候可以存成数字三角形那种:

......
.....
....
...

只不过是可以走上中下三种而已

比较繁琐就不写了。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <vector>
#define max(a,b) ((a) > (b) ? (a) : (b))
#define min(a,b) ((a) < (b) ? (a) : (b))
inline int read()
{
int x = 0;char ch = getchar();char c = ch;
while(ch > '9' || ch < '0')c = ch,ch = getchar();
while(ch <= '9' && ch >= '0')x = x * 10 + ch - '0',ch = getchar();
if(c == '-')return -1 * x;
return x;
}
const int INF = 99999999999; const int MAXN = 200 + 10;
const int MAXM = 200 + 10; int m,n;
int f[MAXM][MAXN];
int g[MAXM][MAXN]; int main()
{
m = read();n = read();
for(int i = 1;i <= m;i ++)
{
for(int j = 1;j <= n;j ++)
{
g[i][j] = read();
}
}
for(int i = 1;i <= m;i ++)
{
for(int j = 1;j <= n;j ++)
{
f[i][j] = max(max(f[i-1][j-1], f[i-1][j]),f[i-1][j+1]) + g[i][j];
}
}
printf("%d", max(max(f[m][n/2], f[m][n/2 + 1]), f[m][n/2 + 2]));
return 0;
}

最新文章

  1. 在jasp页面循环显示
  2. input输入框怎么禁止粘贴
  3. Tomcat7优化配置
  4. 获取window窗口大小
  5. U3D 收藏一个飞机随机运动的方法
  6. thinkphp 实现微信公众号开发(一)
  7. js页面间通信方法(storage事件)(浏览器页面间通信方法)
  8. STM32应用实例十一:基于SPI和AD7192的数据采集
  9. Kotlin基础(四)Lambda编程
  10. Oracle 转移符问题
  11. C/C++笔记 #035# Makefile
  12. springMVC将处理的后的数据通过post方法传给页面时,可能会出现乱码问题,下面提出解决post乱码问题的方法
  13. SpringBoot+JPA+cache入门
  14. iOS Swift WisdomHUD 提示界面框架
  15. Linux内核“问题门” - 学习问题、经验集锦
  16. Mac下安装sbt
  17. PAT甲级1010. Radix
  18. Tkinter Radiobutton
  19. Python strings, 元组tuples, 和numbers是不可更改的对象,而list,dict等则是可以修改的
  20. The connection between feature spaces and smoothness is not obvious, and is one of the things we’ll discuss in the course.

热门文章

  1. markdown常用知识点
  2. windows环境下,svn未备份情况下重新恢复
  3. Hibernate 查询语言
  4. 《DSP using MATLAB》Problem 8.2
  5. IDEA(2018)连接MySQL数据库失败的解决方法(报错08001)
  6. linux下安装rabbitmq 集群
  7. 11-2-break
  8. Java 普通代码块,构造代码块,静态代码块
  9. mysql高级教程(二)-----性能分析
  10. 仓库盘点功能-ThinkPHP_学习随笔