最大的和---------------------思維

在這裏插入圖片描述
在這裏插入圖片描述

解析:
從求最大子段和思想出發。對於二維矩陣我們按照列枚舉一段
在這裏插入圖片描述
上面有兩個藍顏色的方塊,代表着兩列。我們把這兩列用前綴和表示。就轉化成一維的求最大子段和問題了。
所以我們只需要枚舉即可

#include<bits/stdc++.h>
using namespace std;
const int N=150;
int g[N][N];
int n;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++) 
		{
			cin>>g[i][j];
			g[i][j]+=g[i-1][j];
		}
//	int last=0;
	int res=0;
	for(int i=1;i<=n;i++)
		for(int j=i;j<=n;j++)
		{
			int last=0;
			for(int k=1;k<=n;k++)
			{
				 last=max(last,0)+g[j][k]-g[i-1][k];
				res=max(res,last);
			}
		}
	cout<<res<<endl;
 } 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章