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-吃吃吃的主要内容,如果未能解决你的问题,请参考以下文章