洛谷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();
}

猜你喜欢

转载自www.cnblogs.com/lyhhahaha/p/9998537.html