最后一个超时,求解!

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

1633629364zhukuan @ 2017-08-18 10:16:33

#include<iostream>
#include<algorithm>
using namespace std;
int k[505][505],f[505][505],n;
int gcd(int a,int b)
{
    if(f[a][b]==-1)
    {
       if(a==n) f[a][b]=k[a][b];
       else f[a][b]=k[a][b]+max(gcd(a+1,b),gcd(a+1,b+1));
    }
    return f[a][b];
}
int main()
{
    int i,j;
    cin>>n;
    for(i=1;i<=n;i++)
    for(j=1;j<=i;j++)
    cin>>k[i][j];
    for(i=1;i<=n;i++)
    for(j=1;j<=i;j++)
    f[i][j]=-1;
    gcd(1,1);
    cout<<f[1][1]<<endl;
    return 0;
}

by Windowssql2004 @ 2017-08-19 16:22:48

递归吗?复杂度太高了吧……


by Vimpire_D @ 2017-09-24 14:33:46

@Windowssql2004 这个不是用的记忆化吗?复杂度还是可以的吧


by 磨子桥蒟蒻 @ 2018-05-26 17:30:12

换成scanf。。。试试


|