当前位置: 首页 > news >正文

洛谷P1508 Likecloud-吃、吃、吃 [2017年4月计划 动态规划10]

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;
}

 

转载于:https://www.cnblogs.com/huibixiaoxing/p/6735127.html

相关文章:

  • sublime text3及插件安装过程
  • U872-结算成本处理步骤及索引处理
  • Python 3.5 in win10 pip install Orange3
  • 记一次前端工程构建
  • Linux top、VIRT、RES、SHR、SWAP(S)、DATA Memory Parameters Detailed
  • Sping Boot + Spring Security + Mybaits + Logback +JWT验证 项目开发框架搭建
  • Makefile学习之路5——通过函数增强功能
  • scrapy-redis源代码分析
  • 图书管理(5W1H)
  • html-清除悬浮问题
  • php写入文件来调试接口数据
  • HEOI2017题解
  • linux vi/vim文本编辑
  • css未知高度垂直居中
  • 2762 helloparty·开车
  • 【前端学习】-粗谈选择器
  • bearychat的java client
  • ES6--对象的扩展
  • express + mock 让前后台并行开发
  • github指令
  • input实现文字超出省略号功能
  • JavaScript DOM 10 - 滚动
  • java多线程
  • Laravel 中的一个后期静态绑定
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • React 快速上手 - 07 前端路由 react-router
  • 动态魔术使用DBMS_SQL
  • 番外篇1:在Windows环境下安装JDK
  • 浮动相关
  • 与 ConTeXt MkIV 官方文档的接驳
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #Z0458. 树的中心2
  • #传输# #传输数据判断#
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (pytorch进阶之路)扩散概率模型
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (六)Hibernate的二级缓存
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (一)插入排序
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)Unity3DUnity3D在android下调试
  • (转载)利用webkit抓取动态网页和链接
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .net与java建立WebService再互相调用
  • @AutoConfigurationPackage的使用
  • [ACM] hdu 1201 18岁生日
  • [Asp.net mvc]国际化
  • [CVPR2021]Birds of a Feather: Capturing Avian Shape Models from Images
  • [C语言]——函数递归