89分 倒数第二个点tle了

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

MingXBD @ 2017-08-11 19:03:52

#include <bits/stdc++.h>
using namespace std;
int num[1001][1002]={0},sr[1001][1002]={0},n;
int s(int x,int y)
{
    if(y==n) return num[x][y];
    if(sr[x][y]!=0)return sr[x][y];
    sr[x][y]=(s(x,y+1))>(s(x+1,y+1))?(num[x][y]+s(x,y+1)):(num[x][y]+s(x+1,y+1));
    return sr[x][y];
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=i;j++)
    scanf("%d",&num[j][i]);
    cout<<s(1,1);
    return 0;
}

为什么会t掉呢? 看了一圈都是88分,希望有大犇能赐教

如果有测试数据,也感谢


by Ninaye @ 2017-08-12 20:54:18

简单dp啊

#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int maxn = 1000+10;
int N,C;
int dp[maxn][maxn];
int main(){
    while(~scanf("%d",&N)){
        for(int i = 0; i < N; i++)
            for(int j = 0; j <= i; j++)
                scanf("%d",&dp[i][j]);
        for(int i = N-2; i >= 0; i--)
            for(int j = 0; j <= i; j++)
                dp[i][j] += max(dp[i+1][j],dp[i+1][j+1]);
        printf("%d\n",dp[0][0]);
    }
    return 0;
}

by Jeferay @ 2019-02-16 11:57:19

数据太多写不上来,大概就是一堆0里面倒数第n行有个1 把记忆花搜索的条件改为!=-1试试


|