当前位置:网站首页>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;
}
边栏推荐
- Introduction and response to high concurrency
- Freshman learning sharing
- 海思3559万能平台搭建:在截获的YUV图像上画框
- 图形视图框架
- 傑理之修改不需要長按開機功能【篇】
- antd组件upload上传xlsx文件,并读取文件内容
- Dahua cloud native load balancing article - the passenger flow of small restaurants has increased
- Graphic view frame
- 钟薛高回应产品1小时不化:含固体成分 融化不能变成水
- Qt QProgressBar详解
猜你喜欢
图形视图框架
Analyse des données dossiers d'apprentissage - - analyse simple de la variance à facteur unique avec Excel
[foreign journal] sleep and weight loss
Local dealers play the community group purchase mode and share millions of operations
Oracle-PL/SQL编程
[error record] the flutter reports an error (could not read script 'xxx\flutter\u tools\gradle\app\u plugin\u loader.gradle')
【喜欢的诗词】好了歌
数组进阶提高
Wait to solve the zombie process
Oracle cursor
随机推荐
牛客网:龙与地下城游戏
Developers share | HLS and skillfully use Axi_ Customize the master bus interface instructions and improve the data bandwidth - area exchange speed
Niuke: Dragon and dungeon games
Qt QSplitter拆分器
[LeetCode] 回文数【9】
Film and television excerpts
分享 10 个 JS 闭包面试题(图解),进来看看你能答对多少
Webrtc audio and video capture and playback examples and mediastream media stream analysis
数据分析学习记录--用EXCEL完成简单的单因素方差分析
How can I use knockout's $parent/$root pseudovariables from inside a . computed() observable?
go 多线程数据搜索
boot actuator - prometheus使用
easyclick,ec权朗网络验证源码
Xiaopeng P7 had an accident and the airbag did not pop up. Is this normal?
[leetcode] there are duplicate elements [217]
[leetcode] reverse the word III in the string [557]
电商系统微服务架构
【板栗糖GIS】arcmap—为什么使用自定义捕捉的时候,经典捕捉的勾要去掉呢?
小鹏P7出事故,安全气囊未弹出,这正常吗?
How should programmers write logs