70分O(n^3)蒟蒻求助(后三十分TLE)求O(n^2)及以下算法
查看原帖
70分O(n^3)蒟蒻求助(后三十分TLE)求O(n^2)及以下算法
412669
tony18457197574楼主2022/9/14 20:55

以下为代码

#include<bits/stdc++.h>
#define MAXN 1001
using namespace std;
int f[MAXN]={0},fx[MAXN]={0},a[MAXN][MAXN]={0};
long long ta[MAXN][MAXN];
int main(){
	memset(f,128,sizeof(f));
	int n,m;
	cin >> n >> m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			cin >> a[i][j];
	for(int j=1;j<=m;j++){
		for(int i=1;i<=n;i++){
			ta[i][j]=ta[i-1][j]+a[i][j];
		}
	}
	int tmp;
	f[1]=a[1][1];
	for(int i=2;i<=n;i++)
		f[i]=f[i-1]+a[i][1];
	for(int j=2;j<=m;j++){
		for(int i=1;i<=n;i++){
			fx[i]=f[i]+a[i][j];
			for(int k=1;k<i;k++)
				if((tmp=f[k]+ta[i][j]-ta[k][j]+a[k][j])>fx[i])
					fx[i]=tmp;
			for(int k=i+1;k<=n;k++)
				if((tmp=f[k]+ta[k][j]-ta[i][j]+a[i][j])>fx[i])
					fx[i]=tmp;
		}
		for(int i=1;i<=n;i++)
			f[i]=fx[i];
	}
	cout << f[n];
} 
2022/9/14 20:55
加载中...