递推为什么55分RE呢?

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

小豆子范德萨 @ 2020-04-13 22:34:52

RE了45分,奇怪了。有大佬指出哪里出问题了么?

#include <bits/stdc++.h>
using namespace std;
const int maxn = 110;
int a[maxn][maxn];
int dp[maxn][maxn];      //dp[i][j]代表从i,j到末尾能吃到的最大容量 

int main() {
    int n;cin>>n;
    for(int i = 1;i <= n;i++) {
        for(int j = 1;j <= i;j++) {
            scanf("%d",&a[i][j]);
        }
    }
    for(int i = 1;i <= n;i++) {     //递归边界 
        dp[n][i] = a[n][i];
    }

    for(int i = n-1;i >= 0;i--) {
        for(int j = 1;j <= i;j++) {
            dp[i][j] = max(dp[i+1][j],dp[i+1][j+1]) + a[i][j];
        }
    }
    cout<<dp[1][1];
    return 0;
}

by 小豆子范德萨 @ 2020-04-13 22:37:01

哎呀!我真是好蠢啊,数据范围错了


by EvilSpirits @ 2020-04-13 22:58:32

一个二维数组也可以

#include<bits/stdc++.h>
using namespace std;
int n;
int a[1001][1001];
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=i;j++){
            scanf("%d",&a[i][j]);
        }
    }
    for(int i=n-1;i>0;i--){
        for(int j=1;j<=i;j++){
            a[i][j]+=max(a[i+1][j],a[i+1][j+1]);
        }
    }
    cout<<a[1][1];
    return 0;
} 

|