文章

43

粉丝

0

获赞

56

访问

9.1k

头像
最大子矩阵 题解:C++
P1245 北京大学/中国科学院机试题
发布于2025年8月30日 17:02
阅读数 17

#include<bits/stdc++.h>
using namespace std;

int main(){
	int n;
	while(cin>>n){
		int num[120][120],max=-18000;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				cin>>num[i][j];
				// 这里是每个num项保存的是从矩阵开始到这个项的值的和(并且符合矩阵的特征)				
				num[i][j]+=num[i][j-1]+num[i-1][j]-num[i-1][j-1];
			}
		}
		
		// 这部分循环是计算任意矩阵的大小 
		for(int x1=1;x1<=n;x1++){
			for(int x2=x1;x2<=n;x2++){
				for(int y1=1;y1<=n;y1++){
					for(int y2=y1;y2<=n;y2++){
						// 这个公式需要画图推导 
						int sum=num[x2][y2]-num[x1-1][y2]-num[x2][y1-1]+num[x1-1][y1-1];
						if(sum>max){
							max=sum;
						} 
					}
				}
			}
		}

		cout<<max<<endl;
		
	}

	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发