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

软件公司市值排名成都sem优化

软件公司市值排名,成都sem优化,抖音小程序怎么关闭或注销,深圳网页设计公司搜行者seo目录 什么是前缀和? 如何计算前缀和? 前缀和有什么用? 实战 什么是前缀和? 前缀和可以将数组中的连续元素相加 sum是数组中第一个元素到第i个元素的和 感觉像是简单的dp? 如何计算前缀和? 很简单,只…

目录

什么是前缀和?

如何计算前缀和?

前缀和有什么用?

实战

什么是前缀和?

前缀和可以将数组中的连续元素相加

sum是数组中第一个元素到第i个元素的和

感觉像是简单的dp?

如何计算前缀和?

很简单,只要遍历一遍数组,每次将a中当前元素加到上一个前缀和上

时间复杂度是O(N)

代码:

#include <iostream>
#include <vector>
using namespace std;
int main() {//原数组vector<int> a = { 1, 2, 3, 4, 5 };//前缀和数组vector<int> sum(a.size());sum[0] = a[0];//计算前缀和for (int i = 1; i < a.size (); i++) {sum[i] = sum[i - 1] + a[i];}// 输出前缀和数组for (int i = 0; i < a.size (); i++) {cout << sum[i] << " ";}cout << endl;return 0;
}

当然也可以用库函数,不过作者感觉没什么用(需要对库函数掌握得十分滴熟练)

#include<iostream>
#include<vector>
#include<numeric>
using namespace std;
int main() {vector<int> arr = { 1,2,3,4,5 };vector<int> sum(arr.size());partial_sum(arr.begin(), arr.end(), sum.begin());for (int i = 0; i < arr.size(); i++)cout << sum[i] << " ";return 0;
}

 在某些情况下还能再简单,即在原数组中计算,减少空间复杂度

#include <iostream>
#include <vector>
using namespace std;
int main() {vector<int> a = { 1, 2, 3, 4, 5 };int n = a.size();for (int i = 1; i < n; i++) {a[i] = a[i - 1] + a[i];}for (int num : a) {cout << num << " ";}return 0;
}

前缀和有什么用?

1、区间求和

给定一个区间,例如【1,3】,求数组在此区间上的和

#include <iostream>
#include <vector>
using namespace std;
int main() {vector<int> a = { 1, 2, 3, 4, 5 };vector<int> sum(a.size());int left = 1;int right = 3;sum[0] = a[0];for (int i = 1; i < a.size (); i++) {sum[i] = sum[i - 1] + a[i];}//求区间和cout << (sum[right] - sum[left-1]) << endl;return 0;
}

 这里有一个特例,就是当left为0的时候,left-1就越界了

提供两个解决方法,一个是用if(left==0)特判,另一个是原数组从下标为1的位置开始存储(推荐)

注意不能写成sum[right] - sum[left]

2、前缀积(和前缀和差不多)

求区间【1,3】的前缀积就是sum[right]-sum[left-1]

前提是前缀积不能溢出

高精度计算中通常会对前缀积进行取模

sum[i]=(sum[i-1]*arr[i])%mod

感兴趣的可以搜一下乘法逆元/费马小定理/快速幂(其实是作者不会)

3、异或和

求区间【1,3】的异或和就是sum[right]^sum[left-1]

#include<iostream>
#include<vector>
using namespace std;
int main() {vector<int> arr = { 2,2,7,5,7,2,1,4,1,5 };vector<int> s(arr.size());s[0] = arr[0];for (int i = 1; i < arr.size(); i++) {s[i] = s[i - 1] ^ arr[i];}for (int i = 0; i < arr.size(); i++) {cout << s[i] << " ";}return 0;
}

 

前缀异或和数字相同=这段区间异或和为0

比如上图异或和中有2个7,就代表原数组5,7,2这3个数的异或和为0

实战 

洛谷P2004 领地选择

二维前缀和

#include<iostream>
#include<vector>
using namespace std;
int a[1050][1050], dp[1050][1050];
int main() {int n, m, c;cin >> n >> m >> c;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> a[i][j];dp[i][j] = dp[i][j - 1] + dp[i - 1][j] - dp[i - 1][j - 1] + a[i][j];}}int x = 0, y = 0;int MAX = -2147483648;for (int i = c; i <= n; i++) {for (int j = c; j <= m; j++){int t = dp[i][j] - dp[i - c][j] - dp[i][j - c] + dp[i - c][j - c];if (t > MAX) {MAX = t;x = i - c + 1;y = j - c + 1;}}}cout << x << " " << y << endl;return 0;
}

http://www.dtcms.com/wzjs/299327.html

相关文章:

  • 北京网站设计有名 乐云践新注册推广赚钱一个80元
  • 做自己的网站要多少钱网络推广员要怎么做
  • 网站建设文化报价高端网站建设
  • 昭通高速装配式建筑公司网站织梦seo排名优化教程
  • 网站建设套餐有哪些帮收款的接单平台
  • 网站建设视频教程下载seo优化师是什么
  • 网站设计与制作简单吗seo工具包
  • 做网站需要的技术不受国内限制的浏览器下载
  • 河南那家公司做家具行业网站好新媒体营销策略有哪些
  • 在网站建设工作会议上的讲话青岛爱城市网app官方网站
  • 自己做网站帮公司出认证证书违法吗宁波网站seo哪家好
  • 嘉兴制作网站企业全国疫情高峰感染进度查询
  • 建网站的公司重庆网站排名提升
  • 推广方案模板网站seo策划方案案例分析
  • 做卖衣服网站源代码seo推广是什么意思呢
  • 汉力建设网站网站接广告
  • 视频付费网站建设seo网站建设公司
  • 学校网站设计理念网站降权查询工具
  • 减肥网站如何做google关键词分析工具
  • 传媒网站后台免费模板品牌营销策划怎么写
  • 广州做英文网站的公司公司网页制作
  • 网站开发用的是什么语言大数据营销 全网推广
  • 手表网站背景如何做营销策划方案
  • 如何在网站建设远程教育厦门人才网最新招聘信息网
  • 青岛网站建设咨询百度服务平台
  • php 遍历网站网站推广途径和推广要点
  • 龙岗南联网站建设网络营销推广方法十种
  • 网站做外链好不好爱站工具下载
  • 提供完善政府网站建设肇庆百度快照优化
  • 西安家政公司网站建设b2b平台网站