90分dp求助!!!
查看原帖
90分dp求助!!!
931991
Ysjt_stars楼主2023/5/2 16:37
#include<bits/stdc++.h>
using namespace std;
int n,m,a[1005][1005],u,up[1005],down[1005],f[1005]; 
int main(){
	for(int i=1;i<=1004;i++)memset(a[i],-10005,sizeof(a[i]));
	scanf("%d%d",&n,&m);
	//a[n+1][m]=0;
	//a[n][m+1]=0;
	for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&a[i][j]);
//	for(int i=n;i>=1;i--)for(int j=m;j>=1;j--){
//		a[i][j]+=max(max(a[i+1][j],a[i][j+1]),max(a[i-1][j],a[i][j-1]));
//	}
	//printf("\n\n");
	f[1]=a[1][1];
	for(int i=2;i<=n;i++) f[i]=f[i-1]+a[i][1];
	for(int i=2;i<m;i++){
		memset(up,0,sizeof(up));
		memset(down,0,sizeof(down));
		down[1]=f[1]+a[1][i];
		up[n]=f[n]+a[n][i];
		//for(int j=1;j<=m;j++){
		for(int j=2;j<=n;j++)down[j]=max(f[j],down[j-1])+a[j][i];
		for(int j=n-1;j>=1;j--)up[j]=max(f[j],up[j+1])+a[j][i];
		for(int j=1;j<=n;j++)f[j]=max(up[j],down[j]);
		//}
	}
	//for(int i=1;i<=n;i++){
	//	for(int j=1;j<=m;j++)printf("%d ",a[i][j]);
	//	printf("\n");
	//}
	f[1]+=a[1][m];
	for(int i=2;i<=n;i++) f[i]=max(f[i],f[i-1])+a[i][m];
	printf("%d",f[n]);
	return 0;
}

自认为写的很完美,但为什么18和20数据点过不了,求助dalao!!!

2023/5/2 16:37
加载中...