大佬能帮忙看下我的动态转移方程哪里有问题吗?

P1216 [USACO1.5] [IOI1994]数字三角形 Number Triangles

幽灵特工 @ 2020-09-28 12:40:57

#include <bits/stdc++.h>
using namespace std;
int m[1001][1001]={-1};
int r;
int dp[1001][1001];
int main(){
    cin>>r;
    for(int i=1;i<=r;i++){
        for(int j=1;j<=r;j++){
            cin>>m[i][j];
        }
    }
    int ans=-1;
    dp[1][1]=m[1][1];
    for(int i=2;i<r;i++){
        for(int j=1;j<=i;j++){
            dp[i][j]=max(dp[i-1][j]+m[i][j],dp[i-1][j]+m[i][j+1]);
            ans=max(ans,dp[i][j]);
        }
    }
    cout<<ans;
}

by szTom @ 2020-09-28 13:05:52

    dp[1][1]=m[1][1];
    for(int i=2;i<r;i++){
        for(int j=1;j<=i;j++){
-            dp[i][j]=max(dp[i-1][j]+m[i][j],dp[i-1][j]+m[i][j+1]);
+           dp[i][j]=max(dp[i-1][j]+m[i][j],dp[i-1][j+1]+m[i][j+1]);
-           ans=max(ans,dp[i][j]);
        }
    }
+   for (int i = 1; i <= n; ++i) ans = max(dp[n][i], ans);
    cout<<ans;
+   return 0;
}

by 幽灵特工 @ 2020-09-28 15:44:48

@szTom 啊哦,还是不对呢,对样例输出12


|