编译失败求助 谢谢

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

ZhouXiaoYun_junzi @ 2023-05-12 17:08:09

#include<bits/stdc++.h>
using namespace std;
int r;
int a[1001][1001];
int main()
{
    cin >> r;
    for(int i=1;i<=r;++i)
    {
        for(int j=1;j<=i;++j)
        {
            std::cin>>a[i][j];
        }
    }
    for(int i=1;i<=r;++i)
    {
        for(int j=1;j<=i;++j)
        {
            f[i][j]=max(f[i-1][j-1],f[i][j])+a[i][j]);
        }
    }
    int ans=0;
    for(int i=1;i<=r;++i;)ans=max(ans,f[i][j]);
    cout<<ans<<endl;
}

by rnf5114 @ 2023-05-12 17:20:23

@ZhouXiaoYun_junzi

首先,你没有定义f数组,其次,max函数多了或少了一个括号(看你的状态方程是什么来决定是多是少),最后ans找max你只有一层循环少了一重(总感觉你的状态转移方程也不对)


by hjqhs @ 2023-05-12 17:20:26

倒数第三行i后多了一个分号


by hjqhs @ 2023-05-12 17:22:01

转移方程应该是f[i][j]=max(f[i-1][j],f[i-1][j-1])+a[i][j]


by hjqhs @ 2023-05-12 17:24:16

@liyong5114 最后一层循环是可以的 但应该是f[r][i]


by Ptt2012 @ 2023-05-12 17:24:41

你没定义f


by rnf5114 @ 2023-05-12 17:26:50

@hjqhs 主要是ta写的是f[i][j],我只能在尽量不多改变ta的代码的情况下这么改


by ZhouXiaoYun_junzi @ 2023-05-12 17:40:06

100已过 谢谢各位

#include<bits/stdc++.h>
using namespace std;
int r;
int a[1001][1001],f[1001][1001];
int main()
{
    cin >> r;
    for(int i=1;i<=r;++i)
    {
        for(int j=1;j<=i;++j)
        {
            std::cin>>a[i][j];
        }
    }
    for(int i=1;i<=r;++i)
    {
        for(int j=1;j<=i;++j)
        {
            f[i][j]=max(f[i-1][j],f[i-1][j-1])+a[i][j];
        }
    }
    int ans=0;
    for(int i=1;i<=r;++i)ans=max(ans,f[r][i]);
    cout<<ans<<endl;
}

by HappyDavid @ 2023-05-20 10:55:01

@ZhouXiaoYun_junzi 《不要把AC代码发到题目讨论区》


by HappyDavid @ 2023-05-20 10:55:50

@ZhouXiaoYun_junzi 等等等一下,不是C++吗,怎么是源代码C?整错了吧?


|