NYOJ 吃土豆(动态规划)

描述

Bean-eating is an interesting game, everyone owns an M*N matrix, which is filled with different qualities beans. Meantime, there is only one bean in any 1*1 grid. Now you want to eat the beans and collect the qualities, but everyone must obey by the following
rules: if you eat the bean at the coordinate(x, y), you can’t eat the beans anyway at the coordinates listed (if exiting): (x, y-1), (x, y+1), and the both rows whose abscissas are x-1 and x+1.

Now, how much qualities can you eat and then get ?

输入

There are a few cases. In each case, there are two integer M (row number) and N (column number). The next M lines each contain N integers, representing the qualities of the beans. We can make sure that the quality of bean isn‘t beyond 1000, and 1<=M,N<=500.

输出

For each case, you just output the MAX qualities you can eat and then get.

样例输入

4 6

11 0 7 5 13 9

78 4 81 6 22 4

1 40 9 34 16 10

11 22 0 33 39 6

样例输出

242

如果是一行的话,就是说当n==1时,dp[i]表示从开始到第i个数所能取得的最大和,则有dp[i]=max(dp[i-1], dp[i-2]+a[i]);这是每一行的情况,算出每一行的所能得到的最大和,接下来再竖着来,相邻的行不能取,就能用同样的方法求出整个矩阵的最大和,总体思路就是先算每一行再将二维化成一维。

AC代码:

# include <cstdio>
# include <cstring>
# include <algorithm>
using namespace std;
int a[510][510], dp_y[510][510], ans[510];
int main(){
	int n, m, i, j, k;
	while(scanf("%d%d", &n, &m)!=EOF){
		memset(a, 0, sizeof(a));
		for(i=1; i<=n; i++){
			for(j=1; j<=m; j++){
				scanf("%d", &a[i][j]);
			}
		}
		memset(dp_y, 0, sizeof(dp_y));
		for(i=1; i<=n; i++){
			dp_y[i][1]=a[i][1];
			for(j=2; j<=m; j++){
				dp_y[i][j]=max(dp_y[i][j-1], dp_y[i][j-2]+a[i][j]);
			}
		}
		memset(ans, 0, sizeof(ans));
		ans[1]=dp_y[1][m];
		for(i=2; i<=n; i++){
			ans[i]=max(ans[i-1], ans[i-2]+dp_y[i][m]);
		}
		printf("%d\n", ans[n]);
	}
	return 0;
}
时间: 2024-10-15 18:57:57

NYOJ 吃土豆(动态规划)的相关文章

nyoj 吃土豆

吃土豆 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 Bean-eating is an interesting game, everyone owns an M*N matrix, which is filled with different qualities beans. Meantime, there is only one bean in any 1*1 grid. Now you want to eat the beans and collect th

NYOJ 234 吃土豆

吃土豆 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 Bean-eating is an interesting game, everyone owns an M*N matrix, which is filled with different qualities beans. Meantime, there is only one bean in any 1*1 grid. Now you want to eat the beans and collect th

BZOJ 1742 Usaco2005 nov Grazing on the Run 边跑边吃草 动态规划

题目大意:给定一个数轴,初始在位置p,有n坨草(n≤3000),约瑟芬需要吃掉所有的草,定义一坨草的腐败值为吃掉的时间,求最小腐败值之和 容易证明任何时刻约瑟芬吃掉的草都是一个区间.(废话,难道还能路过草不吃?) 因此令fi,j,k表示已经吃掉了以i开头的j坨草,当前在左端点/右端点的最小腐败值之和(包括被吃掉的和未被吃掉的,当然被吃掉的腐败值就不会再涨了) DP方程自己YY吧 注意内存 #include <cstdio> #include <cstring> #include &

nyoj 708 ones 动态规划

http://acm.nyist.net/JudgeOnline/problem.php?pid=708 状态转移方程的思路:对于一个数N,可以是N - 1的状态+1 得到,另外,也可以是(n / 2) * (1 + 1)得到,同理对于任意的奇数p,都有如果n可以整除p,都有f(n / p) + f(p) ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3

NYOJ 苹果【动态规划】

苹果 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 ctest有n个苹果,要将它放入容量为v的背包.给出第i个苹果的大小和价钱,求出能放入背包的苹果的总价钱最大值. 输入 有多组测试数据,每组测试数据第一行为2个正整数,分别代表苹果的个数n和背包的容量v,n.v同时为0时结束测试,此时不输出.接下来的n行,每行2个正整数,用空格隔开,分别代表苹果的大小c和价钱w.所有输入数字的范围大于等于0,小于等于1000. 输出 对每组测试数据输出一个整数,代表能放入背包的苹

NYOJ 195飞翔(动态规划)

描述 鹰最骄傲的就是翱翔,但是鹰们互相都很嫉妒别的鹰比自己飞的快,更嫉妒其他的鹰比自己飞行的有技巧.于是,他们决定举办一场比赛,比赛的地方将在一个迷宫之中. 这些鹰的起始点被设在一个N*M矩阵的左下角map[1,1]的左下角.终点被设定在矩阵的右上角map[N,M]的右上角,有些map[i,j]是可以从中间穿越的.每一个方格的边长都是100米.如图所示: 没有障碍,也没有死路.这样设计主要是为了高速飞行的鹰们不要发现死路来不及调整而发生意外.潘帕斯雄鹰冒着减RP的危险从比赛承办方戒备森严的基地中

head first 设计模式读书笔记 之 策略模式

作为一个php开发者,深知曾经很多程序员都鄙视php,为什么呢?因为他们认为php的语法是dirty的,并且由于开发者水平参差不齐导致php的代码更加乱上加乱,维护起来简直一坨shit一样.随着php加入了面向对象的阵型之后,很多开发者开始使用了oop思想来写代码,php也变得越来越标准,越来越规范.而其中,设计模式起到了不小的作用.最近老大找我谈话,说php这边的开发模块耦合度过高,代码感觉质量不高,想来一次代码重构行动.我对代码重构也是一知半解,而代码重构的基础就是去了解设计模式,于是我翻起

献给初学者--学习ORACLE的第一篇故事

学习ORACLE感触 刚接触ORACLE 数据库没多久,从网上看到一篇描写ORACLE体系知识的故事,叫<SID之家>,抱着兴趣读了一遍,没想到,该故事非常好,对初学者了解ORACLE数据库的体系非常有帮助.且在以后的学习过程中,学到不同阶段ORACLE,在读一遍,也会有不同的感悟.该故事与ORACLE数据库所做的事情进行关联,关联的非常好.在此献给想学习ORACLE数据库的初学者. -_-(其实已经出来很多年了,但是忍不住还是想推广给想学ORACLE数据库的人,因为我就是因为这篇故事才进入了

漫谈架构3

按照之前架构的定义,做好架构首先需要做的就是识别出需要解决的问题.一般来说,如果把真正的问题找到,那么问题就已经解决了80%了.这个能力基本上就决定了架构师的水平. 那么面对问题有哪些困难呢? 我们先看一则笑话.女主人公:老公,把袋子里的土豆切一半下锅.结果老公是把袋子里的每个土豆都削了一半,然后下锅. 当然很多人会说,这个是沟通问题,然后一笑了之.其实,出现这个现象是由于我们大部分时候过于关注解决问题,急于完成自己的工作,而不关心“真正的问题是什么”而造成的.当我们去解决一个问题的时候,一定要