Yangtian_17BEAR @ 2023-06-27 16:16:23
#include<bits/stdc++.h>
using namespace std;
int n,a[1029][1932],w[2923][1103],maxn=-27272288;
int main(){
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)cin>>a[i][j];
a[1][1]=w[1][1];
for(int i=2;i<=n;i++)
for(int j=1;j<=n;j++){
w[i][j]=w[i][j-1]+a[i][j];
if(i!=1&&j!=1)w[i][j]=max(w[i][j],w[i-1][j-1]+a[i][j]);
}
for(int j=1;j<=n;j++)maxn=max(maxn,w[j][n]);
cout<<maxn;
return 0;
}
44分,求————助
by _M1Ku_ @ 2023-06-27 16:45:08
#include<bits/stdc++.h>
using namespace std;
int n,a[1029][1932],w[2923][1103],maxn=-27272288;
int main(){
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)cin>>a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++){
w[i][j]=max(w[i-1][j] + a[i][j],w[i-1][j-1]+a[i][j]);
}
for(int j=1;j<=n;j++)maxn=max(maxn,w[n][j]);
cout<<maxn;
return 0;
}
by _M1Ku_ @ 2023-06-27 16:50:31
@Yangtian_17BEAR
第一个错误:a[1][1]=w[1][1]反了
应该是:w[1][1]=a[1][1]
第二个错误:
统计答案时:
for(int j=1;j<=n;j++)maxn=max(maxn,w[j][n]);
不是w[j][n]这样是统计的1-n行的第n列
应给是:w[n][j]
另外,递推的时候,第二个循环j最好是小于等于i
递推过程中的判断没有必要,去掉也不会RE,因为i==1或j==1时,i-1 j-1为0,不会越界,并且不会影响答案统计
by _M1Ku_ @ 2023-06-27 16:51:19
给个关注行吗
by Yangtian_17BEAR @ 2023-06-27 16:51:27
哦,谢谢谢谢
by Yangtian_17BEAR @ 2023-06-27 16:59:43
@Miku_Fan 请问是这样改吗
#include<bits/stdc++.h>
using namespace std;
int n,a[1029][1932],w[2923][1103],maxn=-27272288;
int main(){
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)cin>>a[i][j];
w[1][1]=a[1][1];
for(int i=2;i<=n;i++)
for(int j=1;j<=i;j++){
w[i][j]=w[i][j-1]+a[i][j];
if(i!=1&&j!=1)w[i][j]=max(w[i][j],w[i-1][j-1]+a[i][j]);
}
for(int j=1;j<=n;j++)maxn=max(maxn,w[n][j]);
cout<<maxn;
return 0;
}
by _M1Ku_ @ 2023-06-27 18:05:07
@Yangtian_17BEAR 递推过程中还是错了,忘给你说了抱歉
#include<bits/stdc++.h>
using namespace std;
int n,a[1029][1932],w[2923][1103],maxn=-27272288;
int main(){
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)cin>>a[i][j];
w[1][1]=a[1][1];
for(int i=2;i<=n;i++)
for(int j=1;j<=i;j++){
w[i][j]=w[i][j-1]+a[i][j]; //这里错了,应该是w[i][j]=w[i-1][j]+a[i][j]
if(i!=1&&j!=1)w[i][j]=max(w[i][j],w[i-1][j-1]+a[i][j]);
}
for(int j=1;j<=n;j++)maxn=max(maxn,w[n][j]);
cout<<maxn;
return 0;
}