当前位置: 首页 > news >正文

青岛网站建设公司排名saas小程序

青岛网站建设公司排名,saas小程序,为哈尔滨网页设计制作,苏州建设厅网站首页题目链接: 1.统计子矩阵 - 蓝桥云课 (lanqiao.cn) 蓝桥杯2022年第十三届省赛真题-统计子矩阵 - C语言网 (dotcpp.com) 说明: 涉及到子矩阵的时候,一般就跟前缀和相关,可以降维。 先回顾一下最大子矩阵,回忆一下一…

题目链接:

1.统计子矩阵 - 蓝桥云课 (lanqiao.cn)

蓝桥杯2022年第十三届省赛真题-统计子矩阵 - C语言网 (dotcpp.com)

说明:

涉及到子矩阵的时候,一般就跟前缀和相关,可以降维。

先回顾一下最大子矩阵,回忆一下一维前缀和的模板,枚举列(行也可以,计算前缀和时就算列上的前缀和)的起点和终点,求每行上的元素之和的时候时间优化为O(1):

最大子段和和最大子矩阵|动态规划-CSDN博客

 如果列的起点和终点确定,那么求小于k的子矩阵个数其实就是求第1行到第m行有多少个和小于k的连续子序列。

用l,r表示这个子序列的左右端点,

如果

因为矩阵元素都为正数

1.sum(l,r)<k,那么sum(i,r)<k ;  l<=i<=r合法的新子序列个数就是r-l+1;

2.sum(l,r)>k,那么sum(l,j)>k;r<=j<=m, 当前区间已经大于k了,没必要再继续向下挪动r了,那就移动l

再注意一下自己的错误:

//错误代码,不能加这个判断 ,因为,当t和b都指向一个元素时,这个元素还大于k//s减为0,t移动到b+1位置,并且接下来仍有可能出现小于k的矩阵 	//if(t>b) break;/*错误代码,因为此时小于k的矩阵不止一个,而是 b-t+1个即i+1列到j列上,t行到b行的矩阵和小于k,那么,固定t, t到b-1行也小于kt到b-2行也小于k,t到X(t<=X<=b)行都小于k,应该加上t到b的数字个数反过来也一样,b移动到下个位置小于k,将b固定,b行到t行 也是 b-t+1个if(s<=k) {ans++;}*/

总结一下:

  1. 子矩阵问题可能会用前缀和降维
  2. 求小于某个值的连续子序列的数量时,使用双指针。l和r都起始点开始,移动r指针,序列和小于k时,新答案有r-l+1个;大于k时,移动l指针直到小于k。

代码:

 只用前缀和的版本,两层循环控制列的起点和终点,两层循环控制行的起点和终点。会超时

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int N =500+10;
int ans = 0;
int k;int mx[N][N]={0};
signed main() {ios::sync_with_stdio(0); cin.tie(0);cout.tie(0);int m,n;cin>>m>>n;cin>>k;for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){cin>>mx[i][j];mx[i][j]+=mx[i][j-1];}}for(int i=0;i<=n-1;i++){for(int j=i+1;j<=n;j++){for(int t=1;t<=m;t++){int s=0;for(int b=t;b<=m;b++){s+=mx[b][j]-mx[b][i];if(s<=k) ans++;else break;}}}}cout<<ans;return 0;
}

加双指针: 

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int N =500+10;
int ans = 0;
int k;int mx[N][N]={0};
signed main() {ios::sync_with_stdio(0); cin.tie(0);cout.tie(0);int m,n;cin>>m>>n;cin>>k;//计算每行上的前缀和 for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){cin>>mx[i][j];mx[i][j]+=mx[i][j-1];}}//	for(int i=0;i<=n-1;i++){
//		for(int j=i+1;j<=n;j++){
//		
//      此处 要控制起始行和终点行 
//		for(int t=1;t<=m;t++){
//		  int s=0;
//		   for(int b=t;b<=m;b++){
//		   	s+=mx[b][j]-mx[b][i];
//		   	if(s<=k) 
//		   	ans++;
//		    else break;
//		   }
//		}
//		
//	  }
//	}for(int i=0;i<=n-1;i++){for(int j=i+1;j<=n;j++){//t头指针,b尾指针//当和大于k,头指针向右挪动//尾指针最后都要移动for(int t=1,b=1,s=0;t<=m&&b<=m;b++){//int s=0; 应该放在上面初始化为0 s+=mx[b][j]-mx[b][i];while(s>k){s-=mx[t][j]-mx[t][i];t++;} //错误代码,不能加这个判断 ,因为,当t和b都指向一个元素时,这个元素还大于k//s减为0,t移动到b+1位置,并且接下来仍有可能出现小于k的矩阵 	//if(t>b) break;/*错误代码,因为此时小于k的矩阵不止一个,而是 b-t+1个即i+1列到j列上,t行到b行的矩阵和小于k,那么,固定t, t到b-1行也小于kt到b-2行也小于k,t到X(t<=X<=b)行都小于k,应该加上t到b的数字个数反过来也一样,b移动到下个位置小于k,将b固定,b行到t行 也是 b-t+1个if(s<=k) {ans++;}*/ans+=b-t+1;}}}cout<<ans;return 0;
}

http://www.yayakq.cn/news/513692/

相关文章:

  • 网站建设与优化计入什么科莫用最少的钱做网站
  • 深圳快速网站制作云主机 几个网站
  • 二手车网站建设网络推广好做吗?
  • 泰安网络软件公司莱阳seo外包
  • 中国建设银行北京市分行网站做采集网站难不
  • 中文 网站模板全国企业信息查询系统入口官网
  • wordpress建外贸网站嘉兴信息发布终端多少钱一台
  • 邯郸网络企业版茂名百度seo公司
  • 网站建设 网站网站如何制作浙江
  • asp网站建设实录pdf外贸网站建设注意事项和建议
  • 上海广告公司联系方式seo咨询顾问
  • 好的h5网站模板柳州正规网站制作
  • 网站页面制作多少钱做影视网站用什么源码
  • 有动效得网站新手网站建设教程图书
  • 网站地图怎么弄电影网站的代理怎么做
  • 福建设厅官方网站六安网红水坝
  • 昆明网站建设搜q.479185700中铁建设门户网站
  • 网站设计岗位做哪些事情广告联盟平台系统
  • 做原创品牌服饰的网站企业vi设计欣赏
  • 服装 多语言 网站源码深圳市官网网站建设哪家好
  • 求有题目做的学习网站找工厂货源上什么平台
  • 网站机房建设解决方案金州网站建设
  • 网站设计制作合同范本建设银行投资网站首页
  • 网站开发费入什么科目残疾人招聘网站建设
  • 网站开发的功能需求和模块划分小白建站
  • 秦皇岛网站开发哪家好开发一个页面多少钱
  • 公司网站制作排名网站开发毕业设计报告
  • 搜不到wordpress 网站建网站需要什么技术
  • 做网站有哪些流程网站设计理念怎么写
  • 秦皇岛建设局局官方网站dw2019网页制作教程