GDUFE ACM-1059最大连续子序列(DP)

news/2024/9/6 6:10:18 标签: 测试, 数据结构与算法

最大连续子序列

Time Limit: 1000ms

Problem Description:

   给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., 
Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个, 
例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和 
为20。 
在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输出该 
子序列的第一个和最后一个元素。

Input:

测试输入包含若干测试用例,每个测试用例占2行,第1行给出正整数K( <= 1000000 ),第2行给出K个不超过100的整数,中间用空格分隔。当K为0时,输入结束,该用例不被处理。

Output:

对每个测试用例,在1行里输出最大和、最大连续子序列的第一个和最后一个元 
素,中间用空格分隔。如果最大连续子序列不唯一,则输出序号i和j最小的那个(如输入样例的第2、3组)。若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素。 

Sample Input:

6
-2 11 -4 13 -5 -2
10
-10 1 2 3 4 -5 -23 3 7 -21
6
5 -8 3 2 5 0
1
10
3
-1 -5 -2
3
-1 0 -2
0

Sample Output:

20 11 13
10 1 4
10 3 5
10 10 10
0 -1 -2
0 0 0

思路:if(f[i-1]>0) f[i]=f[i-1]+a[i];
    else f[i]=a[i];
如输入6
   -5 6 -1 5 4 -7
a[i]-5-15  4  -7
f[i]-56510147

最后再对结果扫描一遍。

但题目加了”输出该子序列的第一个和最后一个元素。“,我被自己弄乱了,
WA的代码:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int a[1000005],f[1000005];
 5 int main()
 6 {
 7     int k,max,num,first,last,b;
 8     while(~scanf("%d",&k),k!=0)
 9     {
10         first=last=b=num=0;
11         for(int i=0;i<k;i++)
12         {
13             scanf("%d",&a[i]);
14             if(a[i]<0)
15                 num++;
16         }
17         max=f[0]=a[0];
18         for(int i=1;i<k;i++)
19         {
20             if(f[i-1]+a[i]>=a[i])
21                 f[i]=f[i-1]+a[i];
22             else{
23                 f[i]=a[i];
24                 b=i;
25                 }
26         }
27         for(int i=0;i<k;i++)
28         {
29             if(f[i]>max)
30             {
31                 max=f[i];
32                 first=b;
33                 last=i;
34             }
35         }
36         if(num==k)
37             printf("0 %d %d\n",a[0],a[k-1]);
38         else
39             printf("%d %d %d\n",max,a[first],a[last]);
40     }
41     return 0;
42 }

经过修改之后才知道:

最后AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int a[1000005],f[1000005];
 5 int main()
 6 {
 7     int k,max,num,first,last,b;
 8     while(~scanf("%d",&k),k!=0)
 9     {
10         first=last=b=num=0;
11         for(int i=0;i<k;i++)
12         {
13             scanf("%d",&a[i]);
14             if(a[i]<0)
15                 num++;
16         }
17         max=f[0]=a[0];
18         for(int i=1;i<k;i++)
19         {
20             if(f[i-1]+a[i]>=a[i])
21                 f[i]=f[i-1]+a[i];
22             else
23             {
24                 f[i]=a[i];
25                 b=i;
26             }
27             if(f[i]>max)
28             {
29                 max=f[i];
30                 first=b;
31                 last=i;
32             }
33         }
34         if(num==k)
35             printf("0 %d %d\n",a[0],a[k-1]);
36         else
37             printf("%d %d %d\n",max,a[first],a[last]);
38     }
39     return 0;
40 }

 

 

 

 

转载于:https://www.cnblogs.com/2119662736lzj/p/6402426.html


http://www.niftyadmin.cn/n/1091459.html

相关文章

C语言指针结构的应用实例,C语言指针应用简单实例

C语言指针应用简单实例这次来说交换函数的实现&#xff1a;1、#include #include void swap(int x, int y){int temp;temp x;x y;y temp;}int main(){int a 10, b 20;printf("交换前&#xff1a;\n a %d, b %d\n", a, b);swap(a, b);printf("交换后&…

springboot 零xml集成mybatis

maven依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0…

tcp三次握手和syn 洪水攻击

1. 连接后&#xff0c;所有的 ack 为1才有效&#xff08;连接后&#xff0c;ack 也一般都是1&#xff09; 2. 建立连接3次握手&#xff0c; 如何确认对方收到了你发的包&#xff0c; seq 是自己发出去的&#xff0c;自己知道seq的值。所以怎么确认对方收到了自己的包呢&#xf…

流水灯c语言程序tm,51单片机用定时器实现流水灯左右移动?

满意答案haozi82882017.01.10采纳率&#xff1a;49% 等级&#xff1a;9已帮助&#xff1a;1365人#includeunsigned char a0xfe;bit flag0;bit k0;unsigned char n0;void main(){EA1;ET11;TR11;TH10x3c;TL10xb0;TMOD0x10;while(1){if(flag1){P0a;flag0;if (k0){a<<1;a|…

Xilinx问题查找

1.登录https://www.xilinx.com/ 2.在All下拉菜单选择Support选项查找技术问题&#xff0c;All选项会查找全部关键词&#xff0c;但是大多数我们只需要技术相关的内容 转载于:https://www.cnblogs.com/chengqi521/p/8109690.html

BZOJ 3208: 花神的秒题计划Ⅰ

3208: 花神的秒题计划Ⅰ Time Limit: 16 Sec Memory Limit: 128 MBSubmit: 704 Solved: 483[Submit][Status][Discuss]Description 背景【backboard】&#xff1a;Memphis等一群蒟蒻出题中&#xff0c;花神凑过来秒题……描述【discribe】&#xff1a;花花山峰峦起伏&#xf…

python文件基本操作(读,写,追加)

一&#xff1a;只读&#xff08;r&#xff09; f(‘d:\ python的联系文件‘’) 绝对路径和相对路径&#xff08;绝对路径&#xff1a;能找到文件开始到结束路径&#xff0c;真实存在的路径&#xff0c;相对路径&#xff1a;在绝对路径一致的情况下新建一个文件&#xff09; f…

使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

使用 final 关键字修饰一个变量时&#xff0c;是指引用变量不能变&#xff0c;引用变量所指向的对象中的内容还是可以改变的。例如&#xff0c;对于如下语句&#xff1a;final StringBuffer anew StringBuffer("immutable");执行如下语句将报告编译期错误&#xff1a…