首页 > 其他分享 >1007 Maximum Subsequence Sum(25分)

1007 Maximum Subsequence Sum(25分)

时间:2022-08-14 23:22:51浏览次数:52  
标签:case 25 int sum subsequence maximum Subsequence numbers 1007

Given a sequence of K integers { N1​, N2​, ..., NK​ }. A continuous subsequence is defined to be { Ni​, Ni+1​, ..., Nj​ } where 1≤i≤j≤K. The Maximum Subsequence is the continuous subsequence which has the largest sum of its elements. For example, given sequence { -2, 11, -4, 13, -5, -2 }, its maximum subsequence is { 11, -4, 13 } with the largest sum being 20.

Now you are supposed to find the largest sum, together with the first and the last numbers of the maximum subsequence.

Input Specification:

Each input file contains one test case. Each case occupies two lines. The first line contains a positive integer K (≤10000). The second line contains K numbers, separated by a space.

Output Specification:

For each test case, output in one line the largest sum, together with the first and the last numbers of the maximum subsequence. The numbers must be separated by one space, but there must be no extra space at the end of a line. In case that the maximum subsequence is not unique, output the one with the smallest indices i and j (as shown by the sample case). If all the K numbers are negative, then its maximum sum is defined to be 0, and you are supposed to output the first and the last numbers of the whole sequence.

Sample Input:

10
-10 1 2 3 4 -5 -23 3 7 -21
 

Sample Output:

10 1 4
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main(){
 4     int k;
 5     int n[10005],sum;
 6     int head,tail,mmax;
 7     cin>>k;
 8     for(int i=1;i<=k;++i){
 9         cin>>n[i];
10     }
11     n[0]=-1;
12     head=1;tail=1;
13     mmax=-1;
14     for (int i=1;i<=k;++i){ 
15         //每到一个n[i]为正数且n[i-1]为负数的地方就进行一轮计算
16         if (n[i]>=0&&n[i-1]<0){ 
17             sum=0;
18             for (int j=i;j<=k;++j){
19                 sum+=n[j];
20                 if (mmax<sum){
21                     mmax=sum;
22                     head=n[i];
23                     tail=n[j];
24                 }
25             }
26         }
27     }
28     if (mmax<0){
29         cout<<"0 "<<n[1]<<" "<<n[k];
30     }
31     else{
32         cout<<mmax<<" "<<head<<" "<<tail;
33     }
34 }

微量级dp,一开始开了个数组存取临时sum,ac后想了一下发现完全没必要,因为sum是线性变化,直接用一个变量就可以表示了,没有dp数组总觉得像暴力...

剪枝条件为最大子序列的两端必为正数。

标签:case,25,int,sum,subsequence,maximum,Subsequence,numbers,1007
From: https://www.cnblogs.com/coderhrz/p/16586683.html

相关文章

  • 1006 Sign In and Sign Out(25分)
    Atthebeginningofeveryday,thefirstpersonwhosignsinthecomputerroomwillunlockthedoor,andthelastonewhosignsoutwilllockthedoor.Givent......
  • Min_25 筛
    怎么都开Min_25筛了那我也开一些定义:\(n\):前缀和上界\(p_i\):第\(i\)个质数(定义\(p_0=1\))\(p_{\max}\):\(<\sqrtn\)的最大质数\(\text{mindiv}(n)\):\(n\)的......
  • [atAGC025E]Walking on a Tree
    设第$i$条边被$c_{i}$条路径覆盖,显然答案上界为$\sum\min(c_{i},2)$事实上,上界可以被取到,考虑以下构造——取树上的一个叶子,假设其到父亲的边为$i$,对其分类讨论:1.若$c_{......
  • Solution -「NOI 2017」「洛谷 P3825」游戏
    \(\mathscr{Description}\)  Link.  给大家看个乐子:link,懒得概括题意啦.\(\mathscr{Solution}\)  对于没有X的情况,显然可以2-SAT;对于有X的情况,暴......
  • Atcoder Grand Contest 025 E - Walking on a Tree(欧拉回路)
    Atcoder题面传送门打个表发现答案等于每条边被覆盖的次数与\(2\)取min之和,考虑如何构造这个上界。首先考虑树是以\(1\)为中心的菊花图,且任意\(A_i,B_i\ne1\)的......
  • 1070 结绳——25分
    给定一段一段的绳子,你需要把它们串成一条绳。每次串连的时候,是把两段绳子对折,再如下图所示套接在一起。这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串......
  • 1065 单身狗——25分
    “单身狗”是中文对于单身人士的一种爱称。本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱。输入格式:输入第一行给出一个正整数N(<=50000),是已知夫妻/伴侣的......
  • org.elasticsearch.transport.RemoteTransportException: [fort2][172.100.4.25:9300]
    elasticsearch报错[2022-08-06T23:00:05,943][INFO][o.e.c.c.JoinHelper][fort1]failedtojoin{fort2}{nR7UstreQIe_yKXlxpo-Ew}{XRdOsMHwTnafWK9SD943Gg}{1......
  • 1060 爱丁顿数——25分
    英国天文学家爱丁顿很喜欢骑车。据说他为了炫耀自己的骑车功力,还定义了一个“爱丁顿数”E,即满足有E天骑车超过E英里的最大整数E。据说爱丁顿自己的E等于87。现给定某人N天......
  • 《GB14925-2010》PDF下载
    《GB14925-2010实验动物环境及设施》PDF下载《GB14925-2010》简介本标准规定了实验动物及动物实验设施和环境条件的技术要求及检测方法,同时规定了垫料、饮水和笼具的......