luogu1508 Likecloud-吃吃吃

Posted headboy2002

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu1508 Likecloud-吃吃吃相关的知识,希望对你有一定的参考价值。

题目大意

  餐桌被划分为了n*m个小方格,每一个方格中都有一个圆形的巨型大餐盘,上面盛满了令李大水牛朝思暮想的食物。李大水牛已将餐桌上所有的食物按其所能提供的能量打了分(有些是负的,因为吃了要拉肚子),他决定从自己所处的位置吃到餐桌的另一侧,但他吃东西有一个习惯——只吃自己前方或左前方或右前方的盘中的食物。求最大获得能量。

 

  矩阵DP裸题。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int MAX_ROW = 210, MAX_COL = 210;
int TotRow, TotCol;
int A[MAX_ROW][MAX_COL], F[MAX_ROW][MAX_COL];

int DP()
{
	memset(F, 0xcf, sizeof(F));
	F[0][(TotCol + 1) / 2] = 0;
	for (int row = 1; row <= TotRow; row++)
		for (int col = 1; col <= TotCol; col++)
		{
			F[row][col] = max(F[row][col], F[row - 1][col - 1] + A[row][col]);
			F[row][col] = max(F[row][col], F[row - 1][col + 1] + A[row][col]);
			F[row][col] = max(F[row][col], F[row - 1][col] + A[row][col]);
		}
	int ans = 0;
	for (int i = 1; i <= TotCol; i++)
		ans = max(ans, F[TotRow][i]);
	return ans;
}

int main()
{
	scanf("%d%d", &TotRow, &TotCol);
	for (int i = 1; i <= TotRow; i++)
		for (int j = 1; j <= TotCol; j++)
			scanf("%d", &A[TotRow - i + 1][j]);
	printf("%d
", DP());
	return 0;
}

  

以上是关于luogu1508 Likecloud-吃吃吃的主要内容,如果未能解决你的问题,请参考以下文章

洛谷 P1508 Likecloud-吃吃吃 题解

P1508 Likecloud-吃吃吃

洛谷——P1508 Likecloud-吃吃吃

P1508-Likecloud-吃吃吃

Likecloud-吃吃吃(洛谷 1508)

洛谷——1508 Likecloud-吃吃吃