1-17

今天很慵懒啊,啥事也没做,把高精度复习了一遍(hdu1002)。

首先俩字符串数组输入,然后按字符串的长度逆序转到整形数组里

(主要是为了把数值的最低位移动到数组的最低位,方便进位);

 

然后对应的位相加存储到一个新的整形数组里,这时不考虑进位;

 

最后遍历数组,处理进位问题,再倒序输出,即是答案。

 

还有一个题hdu1003,是说求一个数列里的子序列中的最大和,这个还是没有想清楚啊。

 

现在想的大概的思路是,找到负值最大的数的位置,然后就能把数列划分为两个小数列,

 

(如果在数列的一头或一尾那么就还是一个数列)求其和。但是后续可能会有新的问题,

 

比如可能要再划分一次,才能找到最大的子序列和。(突然想起这有点像快排的思路额,明天再处理吧。)

 

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 #include <math.h>
 5 #include <iostream>
 6 #include <algorithm>
 7 #define MAXN 1000000+100
 8 using namespace std;
 9 int a[MAXN];
10 
11 int main()
12 {
13     int t,kase;
14     scanf("%d",&t);
15     for(kase=1; kase<=t; ++kase)
16     {
17         int n, i, s, e, maxsum, maxhere, len;
18         scanf("%d",&n);
19         for(i=0; i<n; i++)
20             scanf("%d",&a[i]);
21         maxsum = -2000;
22         maxhere = 0;
23         s = 0;
24         e = 0;
25         for (i=0; i<n; i++)
26         {
27             if (maxhere < 0)
28             {
29                 maxhere = a[i];
30                 s = 1;
31             }
32             else
33             {
34                 maxhere += a[i];
35                 s++;
36             }
37             if (maxhere > maxsum)
38             {
39                 maxsum = maxhere;
40                 len = s;
41                 e = i;
42             }
43         }
44         if(kase == t)
45             printf("Case %d:\n%d %d %d\n",kase,maxsum,e-len+2,e+1);
46         else
47             printf("Case %d:\n%d %d %d\n\n",kase,maxsum,e-len+2,e+1);
48     }
49     return 0;
50 }
HDU1003

 

posted @ 2014-01-17 22:05  猫御龙  阅读(196)  评论(0编辑  收藏  举报