求助

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

刘芝麻 @ 2019-08-01 11:18:28

本人学了2年pascl,pascal过了这题。现在正努力开始转c++,用自学的c++打出来,自信地交出去,结果RE了一个点,求助

#include<bits/stdc++.h>
using namespace std;
int main() 
{
    int a[1000][1000];
    int f[1000][1000];
    int i,n,j,maxs;
    maxs=-11111;
    cin>>n;
    for (i=1;i<=n;i++) 
      for (j=1;j<=i;j++)
        cin>>a[i][j];
    for (i=1;i<=n;i++)
      for (j=1;j<=i;j++)
        if (f[i-1][j]>f[i-1][j-1]) f[i][j]=f[i-1][j]+a[i][j]; else f[i][j]=f[i-1][j-1]+a[i][j];
    for (i=1;i<=n;i++) 
      if (f[n][i]>maxs) maxs=f[n][i];
    cout<<maxs;
    return 0;
} 

by wyw666 @ 2019-08-01 11:22:33

话说数组是不是不应该在main里定义

main里开不了这么大吧


by 金庆涵 @ 2019-08-10 20:14:29

如果RE,把数组放全局范围里(函数外面),函数的栈空间受不了两个1000 * 1000的int数组。另外,if和三种循环里定义的变量是占用分配给if和循环体的空间里的。


by wyb0412 @ 2019-08-18 10:40:27

include <bits/stdc++.h>

using namespace std;

int n, a[1005], i, j, ans, p; int max(int &x, int &y) {return x>y?x:y;} int main() { cin >> n; for(i=n;i;i--) for(j=i;j<=n;j++) scanf("%d",&p),a[j]=max(a[j],a[j+1])+p; for(i=1;i<=n;i++) ans = max(ans,a[i]); printf ("%d", ans); return 0; }


by joerjose @ 2019-10-04 10:16:50

应该是这样的

#include<bits/stdc++.h>
using namespace std;
long long a[1001][1001],n,m,tot,maxn;
int main()
{
    cin>>n;
    tot=1;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=tot;j++)
        {
            cin>>a[i][j];
        }
        tot++;
    }
    for(int i=n;i>1;i--)
    {
        for(int j=1;j<=tot-1;j++)
        {
            if(a[i][j]>=a[i][j+1]) a[i-1][j]+=a[i][j];
            else a[i-1][j]+=a[i][j+1];
        }
        tot--;
    }
    cout<<a[1][1];
    return 0;
 } 

|