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
输出最小正子段和。
Input示例
8
4
-1
5
-2
-1
2
6
-2
Output示例
1

解题思路:记录前缀累加和,然后排序,检查相邻的两项是否能够组成子序列,可以的话就记录该值D,记录最小的D就是结果。
排序的目的是找到前缀和最接近的数。
附ac代码:
 1 #include <cstdio>
2 #include <cstring>
3 #include <algorithm>
4 #include <string>
5 #include <cmath>
6 #include <string>
7 #include <iostream>
8 #include <map>
9 #include <queue>
10 const int maxn = 5 * 1e4 + 10;
11 const int inf = 0x3f3f3f3f;
12
13 using namespace std;
14 typedef long long ll;
15 const ll mod = 1e9 + 7;
16 ll nu[maxn];
17 struct nod {
18 int r;
19 ll sum;
20 }ans[maxn];
21 bool cmp(nod a, nod b) {
22 if(a.sum < b.sum) return 1;
23 else if(a.sum == b.sum && a.r < b.r) return 1;
24 return 0;
25 }
26 int main(int argc, const char * argv[]) {
27 // int t;
28 int n;
29 scanf("%d", &n);
30 ll minn = inf;
31 for(int i = 1; i <= n; ++i) {
32 scanf("%lld", &nu[i]);
33 ans[i].sum = ans[i - 1].sum + nu[i];
34 ans[i].r = i;
35 if(nu[i] > 0)
36 minn = min(nu[i], minn);
37 if(ans[i].sum > 0)
38 minn = min(ans[i].sum, minn);
39 }
40 // printf("%lld %lld xxxx\n", ans[2].sum, minn);
41 sort(ans + 1, ans + 1 + n, cmp);
42
43
44 for(int i = 2; i <= n; ++i) {
45 if(ans[i].r > ans[i - 1].r && ans[i].sum - ans[i - 1].sum > 0)
46 minn = min(minn, ans[i].sum - ans[i - 1].sum);
47 if(ans[i].r < ans[i - 1].r && ans[i - 1].sum - ans[i].sum > 0)
48 minn = min(minn, ans[i - 1].sum - ans[i].sum);
49
50 }
51 if(minn == inf) puts("no solution");
52 else
53 printf("%lld\n", minn);
54 return 0;
55 }

51nod-1065 最小正子段和 【贪心 + 思维】的更多相关文章

  1. 51nod 1065 最小正子段和 (贪心)

    题目:传送门. 题意:中文题. 题解:求前缀和,并且标记每个数的下标,按照前缀和大小进行从小到大排序.随后进行遍历,如果满足下标data[i-1].id<data[i].id&& ...

  2. 51nod 1065 最小正子段和

    题目链接:51nod 1065 最小正子段和 房教说用前缀和做,然后看了别人博客懂了后就感觉,这个真有意思... #include<cstdio> #include<cstring& ...

  3. 51nod 1065 最小正字段和 解决办法:set存前缀和,二分插入和二分查找

    题目: 这题要求大于0的最小字段和,常规O(n)求最大字段和的方法肯定是没法解的. 我的解法是:用sum[i]存前i项的和,也就是前缀和. 这题就变成了求sum[j]-sum[i]的大于0的最小值( ...

  4. 51nod 1065:最小正子段和

    1065 最小正子段和 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  取消关注 N个整数组成的序列a[1],a[2],a[3],-,a[n],从中选出一 ...

  5. AC日记——最小正子段和 51nod 1065

    最小正子段和 思路: 找最小的大于0的sum[j]-sum[i](j>i): 高级数据结构(splay)水过: 来,上代码: #include <cstdio> #include & ...

  6. 51nod-1065:最小正子段和(STL)

    N个整数组成的序列a11,a22,a33,…,ann,从中选出一个子序列(aii,ai+1i+1,…ajj),使这个子序列的和>0,并且这个和是所有和>0的子序列中最小的. 例如:4,-1 ...

  7. 【zznu-2060】 Minsum Plus(最小正子段和)

    题目描述 题意简单到令人发指! 序列A由N个整数组成,从中选出一个连续的子序列,使得这个子序列的和为正数,且和为所有和大于零的子序列中的最小值. 将这个值输出,若无解,输出no solution. 输 ...

  8. [51nod1065]最小正子段和

    题意:求一个序列中大于0的最小子段和. 解题关键: 先求出前缀和和,对于每个位置求某个位置到当前位置和大于1的和的最小值.然而这是复杂度是O(n^2)的.其实可以通过排序优化到O(nlogn).对前缀 ...

  9. [51NOD1065] 最小正子段和(STL,前缀和)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1065 估计没人这么做吧-用一个set维护前缀和,但是set的l ...

随机推荐

  1. wmic process进程管理

    process    进程管理工具 示例:1.列举当前的进程.进程路径.命令行.进程ID.父进程ID.线程数,内存使用::wmic process get name,executablepath,co ...

  2. CentOS7 通过snat进行上网

    需求: 有两台服务器,一台绑定了弹性公网IP,另外一台没有,需要内网服务器通过有弹性ip的机器代理进行上网. 环境: centos7 操作系统 服务器A: 192.168.0.18 (可以上网,有弹性 ...

  3. Failed to start ssh.service: Unit not found.

    Failed to start ssh.service: Unit not found. 报错内容: [Centos7@localhost ~]$ service ssh start Redirect ...

  4. assert False 与 try 结合 在开发中的使用

    让错误抛出 发现其中的问题 # coding=utf-8 from rest_framework.views import exception_handler from rest_framework. ...

  5. 我感兴趣的 .NET 开源项目

    Gui.cs - 用于.NET 的控制台终端 UI 工具包 https://github.com/migueldeicaza/gui.cs Newtonsoft.Json - 高性能的 JSON 解析 ...

  6. CODEVS 2542单词__fail树

    2542 单词 2013年省队选拔赛天津市队选拔赛  时间限制: 2 s  空间限制: 256000 KB  题目等级 : 大师 Master     题目描述 Description 小张最近在忙毕 ...

  7. BZOJ2120 数颜色(带修改的莫队算法)

    Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜 ...

  8. PL/SQL 遇到问题

    报错:Initialization error Oracle client not properly installed 1.下载instanceclient并解压2.打开PL/SQL,在连接数据库的 ...

  9. 七:SpringBoot-集成Redis数据库,实现缓存管理

    SpringBoot-集成Redis数据库,实现缓存管理 1.SpringBoot集成Redis 1.1 核心依赖 1.2 配置文件 1.3 简单测试案例 1.4 自定义序列化配置 1.5 序列化测试 ...

  10. GitLab开发流程图示、Git命令一张图

    GitLab开发流程图示.Git命令一张图 一.GitLab开发流程图示 二.Git命令一张图 作图工具:ProcessOn 一.GitLab开发流程图示 二.Git命令一张图