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
#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?整错了吧?