前缀和练习-最小和
来源:互联网 发布:互联网软件与服务 编辑:程序博客网 时间:2024/05/16 14:27
我们先看看题目:
这道题第一眼看,我们就会自然想到以下的的方法:
用双重循环,用i来表示开始数,j表示结束的数,再通过一个数组来保存由i到j之间数的和,如:10 4 1,输入时的数组a[i]~a[j]之间的数相加,当i从1开始循环,j从m开始循环。循环比较到n-m+1,最后得出最小的和。这种方法也叫窗口。
红框的就是一个窗口,而求它们的和就像窗口一样往下滑
但是这种方法我最后还是没有采纳,所以我们有新的方法,叫前缀和。
前缀和,就是指一个数和前面所有数的和。
那么这道题怎么用前缀和呢?
首先,把数输入到一个a数组里,用一个f数组来保存它们的前缀和,也就是f[i]=ff[i-1]+a[i](a数组和f数组下标为1开始,不能下标为0)。然后就可以用一个变量保存累加三个数f数组里的数减去下标为0时的数,也就是保存它们的部分和,最后通过比较大小,就能求出最小和了。。。
以下是代码:
#include<iostream>#include<cstdio>using namespace std;int a[1000000],f[1000000];int main(){freopen("1497.in","r",stdin);freopen("1497.out","w",stdout);int n,m,s;long long k=100000000;cin>>n>>m;for(int i=1;i<=n;i++) {cin>>a[i];f[i]=f[i-1]+a[i]; }for(int i=0;i<=n-m;i++){s=f[m+i]-f[i];if(s<k)k=s;}cout<<k;return 0;}
0 0
- 前缀和练习-最小和
- 矩阵最小路径和练习
- 51nod 1065 最小正子段和(前缀和)
- 51Nod 1065 最小正子段和 前缀和
- 前缀和
- 前缀和
- 前缀和
- 前缀和
- 前缀和
- 【51nod 1065】【贪心+前缀和】最小正子段和【最小正子串和】
- bzoj3714(最小生成树模型+前缀和建图)
- 算法练习(31):最小和
- 前缀和:区间和
- 前缀和后缀和
- 前缀++和后缀++
- 前缀和并行算法
- {前缀和}soj9564
- HDU1556 前缀和
- 每天一本书计划
- JavaScript 事件详解
- 用jq实现仿百度搜索框
- java 疑难问题知识点解析
- 左右法则过程简单分析
- 前缀和练习-最小和
- Spring DevTools 介绍
- poj2823 Sliding Windows【单调队列】
- git撤销commit,但未git push的命令
- socket基础之c/s通信过程
- XStream的基本用法
- C++变量与指针
- C++输入输出的格式控制1
- Java-验证码图片