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

惠州市住房和城乡建设厅网站下载百度卫星导航

惠州市住房和城乡建设厅网站,下载百度卫星导航,陕西营销型网站建设,上海优化网站方法样例说明 满足条件的子矩阵一共有 19 , 包含: 大小为 11 的有 10 个。 大小为 12 的有 3 个。 大小为13 的有 2 个。 大小为 14 的有 1 个。 大小为 21 的有 3 个。 前缀和二维数组 前缀和暴力搜索 import java.util.*; public class Main{private static int ans0;pub…

在这里插入图片描述
样例说明
满足条件的子矩阵一共有 19 , 包含:

大小为 1×1 的有 10 个。

大小为 1×2 的有 3 个。

大小为1×3 的有 2 个。

大小为 1×4 的有 1 个。

大小为 2×1 的有 3 个。

在这里插入图片描述
前缀和二维数组
在这里插入图片描述

前缀和+暴力搜索

import java.util.*;
public class Main{private static int ans=0;public static void main(String[] args) {Scanner scanner=new Scanner(System.in);int N=scanner.nextInt();int M=scanner.nextInt();int K=scanner.nextInt();int[][] a=new int[N+1][M+1];int[][]  preSum = new int[N+1][M+1];for(int i=1;i<=N;i++){for(int j=1;j<=M;j++){a[i][j]=scanner.nextInt();//二维数组中的各个前缀合//preSum[i][j] = a[i][j]+preSum[i-1][j]+preSum[i][j-1]-preSum[i-1][j-1];}}//暴力枚举二维数组for(int i1=1;i1<=N;i1++){//遍历行for(int i2=i1;i2<=N;i2++){for(int j1=1;j1<=M;j1++){//遍历列for(int j2=j1;j2<=M;j2++){//枚举各个满足要求的前缀和int z=preSum[i2][j2]-preSum[i2][j1-1]-preSum[i1-1][j2]+preSum[i1-1][j1-1];// System.out.println(z);if(z<=K){ans++;}}}}}for (int i = 0; i <=N; i++) {for (int j = 0; j <=M; j++) {System.out.print(preSum[i][j]+" ");}System.out.println();}System.out.println(ans);}
}

4个for循环时间复杂度比较高
采用前缀和+滑动窗口
首先对每一列进行前缀和

  for(int i=1;i<=N;i++){for(int j=1;j<=M;j++){a[i][j]=scanner.nextInt();preSum[i][j] = a[i][j]+preSum[i-1][j];}}

在这里插入图片描述
通过滑动窗口我们可以将4个for循环减少至3个。只需两层for循环遍历行,第三场for循环两个代表列的指针进行滑动窗口。
当遇到不满足条件的时候j+1向右移动列指针。

        for(int i1=1;i1<=N;i1++){for(int i2=i1;i2<=N;i2++){int sum=0;//一个范围的区间和结束需要重新将sum更新为0for(int j1=1,j2=1;j2<=M;j2++){sum+=preSum[i2][j2]-preSum[i1-1][j2];//累加区间和System.out.println(sum);while(sum>K){sum-=preSum[i2][j1]-preSum[i1-1][j1];//不符合条件,减去上一列的区间和(通过左边界的最上层的区间和减去左下边界下一层的区间和就等于上一列的区间和)//System.out.println("preSum[i2][j1]"+preSum[i2][j1]+"-->"+"preSum[i1-1][j1]"+preSum[i1-1][j1]);j1+=1;//向右移动窗口}ans+=j2-j1+1;//j2-j1+1的长度就是符合条件的个数}}}

完整代码:

import java.util.Scanner;
import java.io.*;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {private static StreamTokenizer re=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));//快速输入private static int nextInt() throws IOException {re.nextToken();return (int)re.nval;}public static void main(String[] args) throws IOException{//Scanner scan = new Scanner(System.in);//在此输入您的代码...int N=nextInt();int M=nextInt();int K=nextInt();int[][] a=new int[N+1][M+1];int[][]  preSum = new int[N+1][M+1];for(int i=1;i<=N;i++){for(int j=1;j<=M;j++){a[i][j]=nextInt();preSum[i][j] = a[i][j]+preSum[i-1][j];}}int ans=0;for(int i1=1;i1<=N;i1++){for(int i2=i1;i2<=N;i2++){int sum=0;//一个范围的区间和结束需要重新将sum更新为0for(int j1=1,j2=1;j2<=M;j2++){sum+=preSum[i2][j2]-preSum[i1-1][j2];//累加区间和//    System.out.println(sum);while(sum>K){sum-=preSum[i2][j1]-preSum[i1-1][j1];//不符合条件,减去上一列的区间和(通过左边界的最上层的区间和减去左下边界下一层的区间和就等于上一列的区间和)//System.out.println("preSum[i2][j1]"+preSum[i2][j1]+"-->"+"preSum[i1-1][j1]"+preSum[i1-1][j1]);j1+=1;//向右移动窗口}ans+=j2-j1+1;//j2-j1+1的长度就是符合条件的个数}}}System.out.println(ans);}
}

模拟过程
在这里插入图片描述

http://www.mmbaike.com/news/91809.html

相关文章:

  • 国内外网站建设深圳网站营销seo电话
  • 怎么制作网站后台百度指数查询工具app
  • 接私活做网站设计网络营销推广平台有哪些
  • 网站开发公司网站seo报价单
  • 做网站后有人抢注关键词河北网站建设推广
  • 建设咖啡厅网站的意义排名查询
  • 昆明网站设计网站如何建立
  • 公司网站建设好托管竞价账户哪家好
  • 蓬莱网站建设价格桂林网页
  • 茌平做网站推广什么是软文写作
  • 通王网站内容管理系统牛排seo
  • 九度互联网站推广公司网站制作教程视频
  • h5网站建设app开发平台开发
  • 大良招聘网站建设郑州网络营销策划
  • 学习网站建设的书房地产网站模板
  • 网站管理员怎么做cms快速建站
  • 服务好的高端网站建设企业友情链接出售平台
  • 自己建网站服务器北京网络营销公司排名
  • 住房建设部网站监理员百度怎么做网站
  • 中国风html5网站模板北京seo优化wyhseo
  • 网站怎么开发设计股票指数是什么意思
  • 厦门市建设局新网站免费seo视频教学
  • 响应式网站开发有哪些框架刷关键词排名seo软件软件
  • nas做网站需要备案吗百度资源搜索引擎
  • 在线资源搜索引擎优化的实验结果分析
  • jsp做网站开发制作网站用什么软件
  • 上饶做网站的公司网店代运营诈骗
  • 定制开发电商网站建设公司知乎关键词搜索排名
  • 电脑系统网站建设短视频培训
  • 网站首页的布局设计竞价推广营销