60分求调
查看原帖
60分求调
816528
Deity_Satan楼主2023/8/10 21:01
#include<bits/stdc++.h>

using namespace std;
int m,n,f[115][55][55],vis[55][55];
int M(int a,int b,int c,int d){
	return max(a,max(b,max(c,d)));
}
int main(){
	cin>>m>>n;
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			cin>>vis[i][j];
		} 
	}
	for(int l=1;l<=m+n-1;l++){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(l-i+1<1 || l-j+1<1 || l-i+1>m || l-j+1>m){
					continue;
				}
				f[l][i][j]=M(f[l-1][i-1][j-1]+vis[i-1][l-i+1]+vis[j-1][l-j+1],f[l-1][i][j-1]+vis[i][l-i]+vis[j-1][l-j+1],f[l-1][i-1][j]+vis[i-1][l-i+1]+vis[j][l-j],f[l-1][i][j]+vis[i][l-i]+vis[j][l-j]);
				if(i==j)
					f[l][i][j]-=vis[i][l-i+1];
			}
				 
		}
	}
	cout<<f[n+m-1][n][n];
	return 0;
}
2023/8/10 21:01
加载中...