洛谷P1508 Likecloud-吃、吃、吃 DP
阿新 • • 發佈:2018-11-21
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(); }