1. 程式人生 > >洛谷P1508 Likecloud-吃、吃、吃 DP

洛谷P1508 Likecloud-吃、吃、吃 DP

dp[i][j]表示(i,j)位置上能吃到的最大能量

dp[i][j]=a[i][j]+max(dp[i-1][j-1],dp[i-1][j],dp[i-1][j+1])

#include<iostream>
using namespace std;
int m,n;
int a[205][205];
int dp[205][205];
const int inf=-99999;
int maxx(int a,int b,int c)
{
    a=max(a,b);
    a=max(a,c);
    return a;
}
void solve()
{
    cin>>m>>n;
    
int i,j; for(i=1;i<=m;i++) for(j=1;j<=n;j++)dp[i][j]=inf; for(i=1;i<=m;i++) for(j=1;j<=n;j++)cin>>a[i][j]; int x=n/2+1;//從中間開始 for(i=1;i<=m;i++) for(j=1;j<=n;j++) dp[i][j]=a[i][j]+maxx(dp[i-1][j-1],dp[i-1][j],dp[i-1][j+1]); cout
<<maxx(dp[m][x-1],dp[m][x],dp[m][x+1])<<endl;//中間的三個位置 } int main() { solve(); }