暑期-dp46道(2)
来源:互联网 发布:程序员女神 赵洁琼 编辑:程序博客网 时间:2024/05/22 00:06
杭电oj1231最大连续子序列题解
最大连续子序列
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Problem Description
给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ...,
Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,
例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和
为20。
在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输出该
子序列的第一个和最后一个元素。
Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,
例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和
为20。
在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输出该
子序列的第一个和最后一个元素。
Input
测试输入包含若干测试用例,每个测试用例占2行,第1行给出正整数K( < 10000 ),第2行给出K个整数,中间用空格分隔。当K为0时,输入结束,该用例不被处理。
Output
对每个测试用例,在1行里输出最大和、最大连续子序列的第一个和最后一个元
素,中间用空格分隔。如果最大连续子序列不唯一,则输出序号i和j最小的那个(如输入样例的第2、3组)。若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素。
素,中间用空格分隔。如果最大连续子序列不唯一,则输出序号i和j最小的那个(如输入样例的第2、3组)。若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素。
Sample Input
6-2 11 -4 13 -5 -210-10 1 2 3 4 -5 -23 3 7 -2165 -8 3 2 5 01103-1 -5 -23-1 0 -20
Sample Output
20 11 1310 1 410 3 510 10 100 -1 -20 0 0Huge input, scanf is recommended.HintHint
和dp专题系列(1)基本没差,就是加了个全为负数时的情况,判断下就好了;
PS:改下输出格式A
代码:
#include<cstdio>#include<cstring>#include<string>#include<queue>#include<algorithm>#include<iostream>#include<stack>#include<queue>#include<limits>using namespace std;#define debug 0const int maxn=100000+5;int data[maxn],ans[maxn],numberNum,maxSum,startPos,endPos;bool judge(){ for(int i=1;i<=numberNum;i++) { if(data[i]>=0) { return false; } } return true;}void Do(){ int j; if(judge()) { printf("0 %d %d\n",data[1],data[numberNum]); } else{ for(int i=1; i<=numberNum; i++) { if(ans[i]>maxSum) { maxSum=ans[i]; startPos=endPos=i; } } for(j=endPos-1; ans[j]>=0&&j>0; j--); startPos=j+1; printf("%d %d %d\n",maxSum,data[startPos],data[endPos]); }}int main(){#if debug freopen("in.txt","r",stdin);#endif // debug while(~scanf("%d",&numberNum)) { if(numberNum==0) break; maxSum=INT_MIN; memset(data,0,sizeof(data)); for(int i=1; i<=numberNum; i++) { scanf("%d",&data[i]); ans[i]=data[i]; if(ans[i-1]>0) ans[i]+=ans[i-1]; } Do(); } return 0;}
0 0
- 暑期-dp46道(2)
- 暑期dp46道(4)
- 暑期dp46道(5)hdoj 1421 搬寝室s
- 暑期dp46道(17)--HDOJ1114 Piggy Bank 完全背包
- 暑期dp46道(21)HDOJ 2059 龟兔赛跑
- 暑期dp46道(25)--HDOJ 1300 Pearls
- 暑期dp46道(30) HDOJ 1227 Fast Food
- 暑期dp46道(7)--HDOJ1846 Brave Game
- 暑期dp46道(27)--HDOJ 3008 Warcraft
- 暑期dp46道(36)--HDOJ 2577
- 暑期dp46道(37) HDOJ 2844 COINS
- 暑期dp46道(44)--HDOJ 1058
- 暑期dp46道(46)--HDOJ 1069
- 暑期dp46道(8)--HDOJ 1506 Largest Rectangle in a Histogram
- 暑期dp46道(9)——HDU 1505City Game 求最大子矩阵面积
- 暑期dp46道(11)——HDOJ 1422重温世界杯 dp+记忆化搜索
- 暑期dp46道(12)--HDOJ 2191 多重背包+二进制优化
- 暑期dp46道(14)--HDU 1224 Free DIY Tour类树塔问题+回溯输出
- 开发安全的web应用程序
- 3.1.3连续分配管理方式
- CC2540/CC2541/CC254x之OSAL消息队列
- UVA-537 Artificial Intelligence?
- nginx负载均衡
- 暑期-dp46道(2)
- spring MVC框架下 前台向java后台传送json字符串数据
- UVA10719Quotient Polynomial
- Android中的ScrollView
- 大素数测试和大数素因子分解
- The MySQL server is running with the --read-only option so it cannot execute this statement
- leetcode——Intersection of Two Arrays II
- 某服务请求经负载均衡设备分配到集群A、B、C、D进行处理响应的概率分别是10%、20%、30%和40%。已知测试集群所得的稳定性指标分别是90%、95%、99%和99.9%。现在该服务器请求处理失败,
- js实现全选和反选功能