题意:就从(1,1)出发终点是(n,m),每次移动只能向右一格,并且纵坐标变化不能大于1,路径上的金币都能吃到,问最大金币。
题解:看到这题就很自然的觉得是个dp(雾),然后问操作的时候注意了一下 当i>j的地方是到不了的,所以dp数组初值为0,然后就是一个很简单的dp啦

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m;
const int N=105;
int a[N][N];
int dp[N][N];
int main() {
    cin>>n>>m;
    for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++)
            scanf("%d",&a[i][j]);
    for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++)
            if (j>=i)
                dp[i][j]=a[i][j];
    for (int j=1;j<=m;j++)
        for (int i=1;i<=n;i++)
            dp[i][j]+=max(dp[i-1][j-1],max(dp[i][j-1],dp[i+1][j-1]));
    cout<<dp[n][m]<<endl;
    return 0;
}