1065 最小正子段和
来源:互联网 发布:秩为1的矩阵,求其n次方 编辑:程序博客网 时间:2024/06/03 19:08
N个整数组成的序列a[1],a[2],a[3],…,a[n],从中选出一个子序列(a[i],a[i+1],…a[j]),使这个子序列的和>0,并且这个和是所有和>0的子序列中最小的。
例如:4,-1,5,-2,-1,2,6,-2。-1,5,-2,-1,序列和为1,是最小的。
Input
第1行:整数序列的长度N(2 <= N <= 50000)第2 - N+1行:N个整数
Output
输出最小正子段和。这题求最小的子序列。。我们先把每个区间的sum先求出来,然后把每个sum和对应的id按照sum的大小排个序。然后当sum[i].id<sum[i+1].id说明可以形成子序列。然后更新最小整子段和便可
#include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>using namespace std;const int N=55000;#define inf 0x3f3f3f3f3f3fint a[N];struct node{ long long x; int id;};bool cmp(node a,node b){ return a.x<b.x;}node sum[N];int main(){ int n; while(scanf("%d",&n)!=EOF) { for(int i=0;i<n;i++) scanf("%d",&a[i]); sum[0].x=a[0]; sum[0].id=0; for(int i=1;i<n;i++) { sum[i].x=sum[i-1].x+a[i]; sum[i].id=i; } sort(sum,sum+n,cmp); long long ans=inf; for(int i=0;i<n-1;i++) { if(sum[i].x>0) ans=min(sum[i].x,ans); if(sum[i+1].x>0) ans=min(ans,sum[i+1].x); if(sum[i].id<sum[i+1].id) { long long tmp=sum[i+1].x-sum[i].x; if(tmp>0) { if(tmp<ans) ans=tmp; } } } cout<<ans<<endl; } return 0;}
0 0
- 1065 最小正子段和
- 51nod 1065:最小正子段和
- 51nod 1065 最小正子段和
- 51NOD 1065 最小正子段和
- 51nod 1065 最小正子段和
- 51nod-1065:最小正子段和
- 51Node 1065----最小正子段和
- 51nod 1065 最小正子段和
- 51nod 1065 最小正子段和
- 51nod 1065 最小正子段和
- 51nod 1065 最小正子段和
- 51nod 1065 最小正子段和
- 51nod 1065 最小正子段和 -暴力
- 最小正子段和
- 【51nod 1065】【贪心+前缀和】最小正子段和【最小正子串和】
- 51nod 1065 最小正子段和(最小正字段和)
- 最大子段和(51Nod 1049)、最小正子段和(51Nod 1065)、总结(最小子段和、最大子段和、最小正子段和)
- 51nod oj 1065 最小正子段和 【贪心--区间和】
- Android高效显示图片详解(一)
- Android studio jni编写步骤,流程
- Anakia 转换xml文档为其他格式
- Android中webview快速上手方式
- 静态库和动态库的分析
- 1065 最小正子段和
- Android高效显示图片详解(二)
- 黑马程序员_File对象的练习
- swustoj----142猴子报数
- 数据库中的模式跟基本表、视图、索引的区别
- Android高效显示图片详解(三)
- HBase的Nonce实现分析
- Android WebView总结
- Android 系统应用调用,intent 的使用方法总结