当前位置:网站首页>Niuke network: maximum submatrix
Niuke network: maximum submatrix
2022-07-02 22:56:00 【lsgoose】
1. The prefix and
Use a prefix of violence and , This submatrix , We can use the coordinates of the upper left corner and the lower right corner to determine , When we read data , Use an array to store (1,1) It's the upper left corner ,(i,j) Is the sum of the matrix in the lower right corner .
sum[i][j]=sum[i][j-1]+sum[i-1][j]-sum[i-1][j-1]+a[i][j]
Then we fix the upper left corner (x,y), Traverse all the lower right corners (i,j)( Including the upper left corner itself ), Then the matrix sum of the two can be solved in this way :
sum = sum[i][j]-sum[x-1][j]-sum[i][y-1]+sum[x-1][y-1]
#include<bits/stdc++.h>
using namespace std;
const int N=101;
int sum[N][N];
int n;
void get(int x, int y, int &res){
for(int i=x;i<=n;++i){
for(int j=y;j<=n;++j){
int t=sum[i][j]-sum[x-1][j]-sum[i][y-1]+sum[x-1][y-1];
if(t>res){
res=t;
}
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
int t;
cin>>t;
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+t;
}
}
int res=0x80000001;
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
get(i,j,res);
}
}
cout<<res<<endl;
}
2. Dynamic programming && The prefix and
dp The idea is to find the prefix and of each column when reading the data .
Then fix two lines , Ergodic column . The process of traversing a column is a bit like finding the maximum continuous sum of a one-dimensional array . Select the maximum value in the traversal process .
The time complexity here is O(n^3), Compared with the one above O(n^4), Using prefix sum will reduce the complexity of finding the sum of matrices .
#include <bits/stdc++.h>
using namespace std;
const int N=510,inf=1e18;
typedef long long ll;
ll a[N][N],sum[N][N],dp[N];
int main()
{
ios::sync_with_stdio(false);
int n;cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
sum[i][j]=sum[i-1][j]+a[i][j]; // The first j Before column i Line prefix and
}
}
ll mx=-inf;
for(int k1=1;k1<=n;k1++) // That's ok Upper end point
{
for(int k2=k1;k2<=n;k2++) // That's ok Lower point
{
//dp[0]=0;
for(int i=1;i<=n;i++) // Column
{
ll tmp=sum[k2][i]-sum[k1-1][i]; // The first i Column [k1,k2] The sum of the trips
dp[i]=max(dp[i-1]+tmp,tmp); // The maximum sub segment sum method
mx=max(mx,dp[i]);
}
}
}
printf("%lld\n",mx);
return 0;
}
边栏推荐
- 杰理之修改不需要长按开机功能【篇】
- 杰理之直接触摸样机的顶针反应不正常【篇】
- Local dealers play the community group purchase mode and share millions of operations
- Unity publishes a method of webgl playing sound
- 海思3559万能平台搭建:在截获的YUV图像上画框
- World Environment Day | Chow Tai Fook serves wholeheartedly to promote carbon reduction and environmental protection
- Odoo13 build a hospital HRP environment (detailed steps)
- 分享 10 个 JS 闭包面试题(图解),进来看看你能答对多少
- #include errors detected. Please update your includePath.
- 杰理之、产线装配环节【篇】
猜你喜欢
随机推荐
go 多线程数据搜索
Golang's learning route
【喜欢的诗词】好了歌
The kth largest element in the [leetcode] array [215]
Graphic view frame
DTM distributed transaction manager PHP collaboration client V0.1 beta release!!!
P1007 独木桥
地方经销商玩转社区团购模式,百万运营分享
Baidu AI Cloud - create a face recognition application
杰理之内置短按再长按,不管长按多长时间都是短按【篇】
NC50965 Largest Rectangle in a Histogram
UE4 UI adaptive screen
`${}`的用法
The threshold value of fusing proportion cannot be changed with sentinel, and setting the slow call proportion has no effect
WebRTC音视频采集和播放示例及MediaStream媒体流解析
Objects and object variables
pytorch训练CPU占用持续增长(bug)
电商系统微服务架构
从2022年Q1财报看携程的韧性和远景
性能优化----严苛模式