PTA 数据结构 01-复杂度2 Maximum Subsequence Sum (25分)
2016-05-27 07:50
357 查看
第七个测试点始终过不去,但是根据网上找到的答案找出了原因:
若
INPUT:
—10
—-2 -2 0 1 2 3 4 5 6 7
OUPUT:
28 2 7
——-我的代码(在PAT甲级可以AC,但这个程序并不是完全正确,所以我的代码仅供参考)
#include<stdio.h> int main() { int a[100000]={0}; int b[1][2]={0},cnt=0,pnt=0,qnt=0; int N,MAXscq=0,CURscq=0; scanf("%d",&N); for(int i=0;i<N;i++) { scanf("%d",&a[i]); if(a[i]<0)qnt++; } if(qnt==N) { printf("0 %d %d",a[0],a[N-1]); return 0; } for(int j=0;j<N;j++) { CURscq+=a[j]; if(CURscq>0)//记录到最大值之前 cnt++; if(CURscq>MAXscq) { b[0][1]=a[j]; b[0][0]=a[j-cnt+1]; MAXscq=CURscq; } if(CURscq<0) { cnt=0; CURscq=0; } } printf("%d %d %d",MAXscq,b[0][0],b[0][1]); return 0; }
抛弃了我的算法后去网上找到的AC
#include<bits/stdc++.h> using namespace std; int n,a[10000+5]; int main() { int i,ans,t,tl,tr,l,r; while(~scanf("%d",&n)) { memset(a,0,sizeof(a)); for(i=0; i<n; i++) scanf("%d",&a[i]); t=tl=0; ans=r=l=-1; for(i=0; i<n; i++) { t+=a[i]; if(t<0) { t=0; tl=i+1; } else { if(t>ans) { ans=t; l=tl; r=i; } else if(t==ans&&l+r>i+tl) { l=tl; r=i; } } } if(l==-1) printf("0 %d %d\n",a[0],a[n-1]); else printf("%d %d %d\n",ans,a[l],a[r]); } return 0; }
相关文章推荐
- 慢查询日志的数据结构与API
- Java数据结构算法之选择排序、插入排序、冒泡排序、二分查找
- SDTU 数据结构之顺序表的应用
- 数据结构与算法分析概要
- 数据结构—顺序表的实现
- Huffman code
- 【线段树】ZKW线段树(noip2012D2T2)(选教室)
- 数据结构:图 C++实现
- 数据结构基础知识(二)
- 大话数据结构与算法:算法初步1
- 队列及栈相关题目的实现
- 各种排序算法总结
- 数据结构之排序一
- 数据结构 第十章 内部排序之插入排序
- 数据结构 第十章 内部排序简介
- 数据结构课后题目源码
- caffe中Blob数据结构
- 【数据结构】非比较排序的算法实现(包括计数排序、计数排序)
- 数据结构与算法 —— 向量的扩容策略与分摊时间复杂度
- 顺序表的算法操作