89pts求助

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

Orange1015 @ 2022-05-21 16:34:09

#include<bits/stdc++.h>
using namespace std;
int r,a[1005][1005]={},mem[1005][1005]={};
int dp(int x,int y){
    if(x==r) return a[x][y];
    if(mem[x][y]) return mem[x][y];
    return mem[x][y]=a[x][y]+max(dp(x+1,y),dp(x+1,y+1));
}
int main(){
    cin >> r;
    std::ios::sync_with_stdio(false);
    for(int i=1;i<=r;i++)
        for(int j=1;j<=i;j++)
            cin >> a[i][j];
    for(int i=1;i<=r;i++) mem[r][i]=a[r][i];
    cout << dp(1,1);
    return 0;
}

第8个点TLE


by John_Xiang @ 2022-05-30 09:37:11

帮你改了一下


using namespace std;
int r,a[1005][1005]={},mem[1005][1005]={};
int dp(int x,int y){
    if(x==r) return a[x][y];
    if(mem[x][y] != -1) return mem[x][y];
    return mem[x][y]=a[x][y]+max(dp(x+1,y),dp(x+1,y+1));
}
int main(){
    cin >> r;
    std::ios::sync_with_stdio(false);
    for(int i=1;i<=r;i++)
        for(int j=1;j<=i;j++){
            cin >> a[i][j];
            mem[i][j] = -1;
        }
    for(int i=1;i<=r;i++) mem[r][i]=a[r][i];
    cout << dp(1,1);
    return 0;
}```

|