用了记忆化搜索也过不了,TEL一个点

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

Lucky_Kira @ 2019-06-16 23:15:16

#include<iostream>
#include<cstdio>
using namespace std;
int a[1010][1010], n, did[1010][1010];
inline int _max(int a, int b)
{
    if(a>b) return a;
    return b;
}
int f(int x, int y)
{
    if(x==n) return a[x][y];
    if(did[x][y]) return did[x][y];
    did[x][y] = _max(f(x+1, y), f(x+1, y+1))+a[x][y];
    return did[x][y];
}
int main()
{
    cin>>n;
    for(int i=1; i<=n; i++)
    for(int j=1; j<=i; j++)
    scanf("%d", &a[i][j]);
    printf("%d", f(1, 1));
    return 0;
}

数据下载下来显示全是0,这个要怎么优化?


by Alan_Zhao @ 2019-08-04 21:49:18

Orz @六道仙人


by Surpersolo @ 2019-08-19 09:52:51

我不用记忆化搜索都对了

by Surpersolo @ 2019-08-19 09:53:26

#include<bits/stdc++.h>
using namespace std;
long long n,int a[1000][1000],ans;
int main() {
    cin>>n;
    for (int i=1; i<=n; i++)
        for (int j=1; j<=i; j++)
            cin>>a[i][j];
    for (int i=2; i<=n; i++) {
        for (int j=1; j<=i; j++)
            a[i][j]=max(a[i-1][j],a[i-1][j-1]);
    }
    for (int i=1; i<=n; i++)
        ans+=a[i][j];
    cout<<ans;
    return 0;
}
你能在这个代码中看出什么毛病

by Surpersolo @ 2019-08-19 09:53:52

这个代码就是被我改变了一点

by Surpersolo @ 2019-08-19 09:54:17

。。


by kub_inst @ 2019-10-27 19:07:33

@六道仙人 这个针对tle一般不管用

//除了某些擦线的


by torque @ 2019-10-27 19:10:40

其实是搞着完的,对于这种题你这么搞反而会变慢


by ONE_FOR_ALL @ 2020-01-12 19:03:07

TLE的那个点全是0,你需要定义一个used二维数组来判断是否访问过,只用储存结果的数组是否为零不行


by dinglinxi0409 @ 2021-08-16 08:20:29

记忆化数组初始化成-1


上一页 |