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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!