xyz123hhh @ 2023-04-06 14:27:30
#include<iostream>
#include<algorithm>
using namespace std;
long dp[10000][10000];
long n;
long i;
int main()
{
cin>>n;
for(long i=1;i<=n;i++)
{
for(long j=1;j<=i;j++)
{
cin>>dp[i][j];
}
}
long o=0;
long u=0;
for(long i=2;i<=n;i++)
{
for(long j=1;j<=i;j++)
{
o=dp[i-1][j-1];
u=dp[i-1][j];
if(o>u)
{
dp[i][j]+=dp[i-1][j-1];
}
dp[i][j]+=dp[i-1][j];
}
}
long t =0;
for(long i=1;i<=n;i++)
{
t=max(t,dp[i][n]);
}
cout<<t<<endl;
return 0;
}
by Smithespics @ 2023-04-07 17:16:17
@xyz123hhh 你的错误有点多,居然还能有33pts(不可思议)
for(long i=2;i<=n;i++)
{
dp[i][1]+=dp[i-1][1];
for(long j=2;j<i;j++)
{
dp[i][j]+=max(dp[i-1][j],dp[i-1][j-1]);
}
dp[i][i]+=dp[i-1][i-1];
}
t=max(t,dp[i][n]);
//正确做法应该是t=max(t,dp[n][i]);
希望对你有帮助,其次推荐你可以去再学习一下滚动数组的知识。