hdu 1003 笔记

诶么、 终于AC了 - -

最长子序列的问题加上了起始点和终止点 (多解的情况下 以第一个为准)

一开始没有考虑到负数的情况 悲剧了 。

看来以后做题得多考虑几组测试数据,考虑全面点。

还有就是int s[100010], r[100010], p[100010];

int s[100010];

int r[100010];

int p[100010];

在VC6下不一样呢、

1 #include <iostream>
2
3  using namespace std;
4 int s[100010], r[100010], p[100010];
5
6 int max(int a,int b){
7 return a>b?a:b;
8 }
9
10 int main(){
11
12 int n;
13 int len;
14 int i,j;
15 int e;
16
17 int mx;
18 cin>>n;
19
20
21 for(j=0;j<n;j++){
22
23
24 cin>>len;
25 for(i=0;i<len;i++){
26 cin>>p[i];
27 }
28
29 int sum=0;
30
31 r[0]=mx=p[0];
32 s[0]=e=0;
33
34 for(i=1;i<len;i++)
35 {
36
37 if(p[i]>r[i-1]+p[i]){
38 r[i]=p[i];
39 s[i]=i; //变成当前数开始
40 }
41 else{
42 r[i]=r[i-1]+p[i];
43 s[i]=s[i-1]; //加上当前数
44 }
45
46 if(mx<r[i]){
47 mx=r[i];
48 e=i; //最大
49 }
50 }
51
52
53 cout<<"Case "<<j+1<<":"<<endl;
54 cout<<mx<<" "<<s[e]+1<<" "<<e+1<<endl;
55 if(j!=n-1)
56 cout<<endl;
57
58 }
59
60 return 0;
61 }

原文地址:https://www.cnblogs.com/lfzark/p/2068746.html