求助!
查看原帖
求助!
334041
沉鸣cmh楼主2021/7/17 19:20

70分的记搜,有改动空间吗?

#include<bits/stdc++.h>
using namespace std;
int n,m,a[1005][1005],su[1005][1005],sum[1005][1005];
int z(int y,int a,int b){
	if(a>b)swap(a,b);
	return sum[y][b]-sum[y][a-1];
}
int dfs(int x,int y){int th=su[0][0];
	if(y==m)return z(m,x,n);
	if(su[x][y]!=su[0][0])return su[x][y];
	for(int i=1;i<=n;i++){
		th=max(th,dfs(i,y+1)+z(y,i,x));
	}//cout<<x<<' '<<y<<' '<<th<<endl;
	return su[x][y]=th;
}
int main(){memset(su,128,sizeof(su));
	cin>>n>>m;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>a[i][j];
	for(int i=1;i<=m;i++)for(int j=1;j<=n;j++)sum[i][j]=sum[i][j-1]+a[j][i];
	//for(int i=1;i<=m;i++){for(int j=1;j<=n;j++)cout<<sum[i][j]<<' ';cout<<endl;}
	cout<<dfs(1,1);
	return 0;
} 
2021/7/17 19:20
加载中...