前缀和问题(c++)

干货

题目练习

条件前缀和

cpp 复制代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int p,a[100000010],dp[100000010];

int main()
{
	cin>>p;
	for(int i = 0;i<p;i++)
	{
		cin>>a[i];
	}
	dp[0] = 0;
	for(int i = 1;i<=p;i++)//构建前缀和数组
	{
		dp[i] = dp[i-1];
		if(a[i-1]>0) dp[i]+= a[i-1];//题目要求只算正数
	}
	
	int x;
	cin>>x;
	while(x--)
	{
		int n,m;
		cin>>n>>m;
		cout<<dp[m]-dp[n-1]<<endl;
	}
	return 0;
}

最大子矩阵和

cpp 复制代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n,m;
int a[1010][1010];
int p[1011][1011];

int main()
{
	cin>>n>>m;
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<m;j++)
		{
			cin>>a[i][j];
		}
	}
	for(int i = 0;i<=n;i++) p[i][0] = 0;
	for(int i = 0;i<=m;i++) p[0][i] = 0;
	for(int i = 1;i<=n;i++)
	{
		for(int j = 1;j<=m;j++)
		{
			p[i][j] = p[i-1][j]+p[i][j-1]+a[i-1][j-1]-p[i-1][j-1];
		}
	}
	
	int ma = -999999999;
	int max1,max2,may1,may2;
	for(int i = 1;i<=n;i++)
	{
		for(int j = 1;j<=m;j++)
		{
			for(int k = i;k<=n;k++)
			{
				for(int l = j;l<=m;l++)
				{
					int sum = p[k][l]-p[i-1][l]-p[k][j-1]+p[i-1][j-1];
					if(sum>=ma)
					{
						max1 = i,max2 = k,may1 = j,may2 = l;
						ma = sum;
					}
				}
			}
		}
	}
	for(int i = max1-1;i<=max2-1;i++)
	{
		for(int j = may1-1;j<=may2-1;j++)
		{
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}
	cout<<ma;
	
	return 0;
}

统计全1子矩阵

cpp 复制代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n,m;
int a[1010][1010];
int p[1011][1011];

int main()
{
	cin>>n>>m;
	for(int i = 0;i<n;i++)
	{
		for(int j = 0;j<m;j++)
		{
			cin>>a[i][j];
		}
	}
	for(int i = 0;i<=n;i++) p[i][0] = 0;
	for(int i = 0;i<=m;i++) p[0][i] = 0;
	for(int i = 1;i<=n;i++)
	{
		for(int j = 1;j<=m;j++)
		{
			p[i][j] = p[i-1][j]+p[i][j-1]+a[i-1][j-1]-p[i-1][j-1];
		}
	}
	
	int cnt = 0;
	for(int i = 1;i<=n;i++)
	{
		for(int j = 1;j<=m;j++)
		{
			for(int k = i;k<=n;k++)
			{
				for(int l = j;l<=m;l++)
				{
					int sum = p[k][l]-p[i-1][l]-p[k][j-1]+p[i-1][j-1];
					if(sum==(k-i+1)*(l-j+1)) cnt++;
				}
			}
		}
	}
	
	cout<<cnt;
	
	return 0;
}
相关推荐
君义_noip17 小时前
信息学奥赛一本通 1661:有趣的数列 | 洛谷 P3200 [HNOI2009] 有趣的数列
c++·算法·组合数学·信息学奥赛·csp-s
程序员:钧念17 小时前
深度学习与强化学习的区别
人工智能·python·深度学习·算法·transformer·rag
英英_18 小时前
MATLAB数值计算基础教程
数据结构·算法·matlab
一起养小猫18 小时前
LeetCode100天Day14-轮转数组与买卖股票最佳时机
算法·leetcode·职场和发展
hele_two18 小时前
快速幂算法
c++·python·算法
OopspoO19 小时前
C++杂记——Name Mangling
c++
yuanmenghao19 小时前
车载Linux 系统问题定位方法论与实战系列 - 车载 Linux 平台问题定位规范
linux·运维·服务器·网络·c++
小羊羊Python19 小时前
SoundMaze v1.0.1正式发布!
开发语言·c++
l1t19 小时前
利用DeepSeek将python DLX求解数独程序格式化并改成3.x版本
开发语言·python·算法·数独
jllllyuz19 小时前
基于子集模拟的系统与静态可靠性分析及Matlab优化算法实现
算法·matlab·概率论