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/archive/2011/06/02/2068746.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值