HZOJ 最大子阵和 动态规划

题面:

 

解题思路:

最大的子矩阵和要么在前面,要么在后面,要么在中间,取两个变量m,max,m为不断累加的值,累加到小于等于0时就置零,保证后面加到的数不受前面影响。在累加过程中由max存最大的m值。

对矩阵的数据处理:

a[i][j] += a[i][j-1];// a[i][j]保存第i行1~j列数值之和

或者 a[i][j] += a[i-1][j]//a[i][j]保存第j列1~i行数值之和

通过三层循环依次计算每个矩阵的和 m += a[k][j] - a[k][i] 或者 m+= a[j][k] - a[i][k];

代码:

复制代码
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    int N,map[101][101];
    cin>>N;
    for(int i=1;i<=N;i++){
        for(int j=1;j<=N;j++){
            cin>>map[i][j];
            map[i][j] += map[i][j-1];//map[i][j]表示第i行 ,1到j列的数值之和 
        }
    }
    int max=-1,m=0;
    for(int i=0;i<N;i++){//一行内的左开始
        for(int k=i+1;k<=N;k++){//一行内的右开始
            m=0;
            for(int j=1;j<=N;j++){
                m+=map[j][k]-map[j][i];
                if(m>max) max=m;
                if(m<0) m=0;
            }
        }
    }
    cout<<max<<endl;
}
复制代码

 

posted @   阿纳先森  阅读(75)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示