HDOJ 1003

マックス合計

制限時間:1000分の2000 MS(Javaの/その他)メモリの制限:32768分の65536 K(Javaの/その他)
の合計提出(S):85953受理提出(S):19912


問題の説明
シーケンス[1]、[2]、[3] ...... [N]が与えられ、あなたの仕事は、サブシーケンスの最大合計を計算することです。例えば、(6、-1,5,4、-7)が与えられると、このシーケンスにおける最大合計は、6 +(-1)+ 5 + 4 = 14です。
 

 

入力
入力の最初の行は整数テストケースの数を意味し、T(1 <= T <= 20)を含みます。次いで、Tラインは、次の各ライン番号N(1 <= N <= 100000)で始まり、その後、N個の整数は(すべての整数は、-1000〜1000の間である)に続きます。
 

 

出力
各テストケースのために、あなたは、出力の2行をする必要があります。、#はテストケースの数を意味します。最初の行は、「ケース#」です。2行目は三つの整数、配列中の最大合計、サブシーケンスの開始位置は、サブシーケンスの終了位置を含んでいます。以上の結果、出力最初のものがある場合。出力2例の間に空白行。
 

 

サンプル入力
2 5 6 -1 5 4 -7 7 0 6 -1 1-6 7 -5
 

 

サンプル出力
ケース1:14 1 4ケース2:7 1 6
 1 #include <iostream>
 2 using namespace std;
 3 
 4 
 5 int main()
 6 {
 7         int numbers;
 8         cin>>numbers;
 9         for(int k =0;k<numbers;k++)
10         {
11                 int num;
12                 cin>>num;
13                 
14                 
15                         int * number = new int [num];
16                         int * start =  new int [num];
17                         int * b =  new int [num];
18                         for(int i=0;i<num;i++)
19                                 cin>>number[i];
20                         
21                         b[0]= number[0];
22                         start[0]=0;
23                         for(int i=1;i<num;i++)
24                         {
25                                 if(b[i-1]+number[i]>=number[i])
26                                 {
27                                         b[i]=b[i-1]+number[i];
28                                         start[i]= start[i-1];
29                                 }
30                                 else
31                                 {
32                                         b[i]= number[i];
33                                         start[i]= i;
34                                 }
35                         }
36                         int max = b[0];
37                         int pos=0;
38                         for(int i=0;i<num;i++)
39                         {
40                                 if(b[i]>max)
41                                 {
42                                         max=b[i];
43                                         pos = i;
44                                 }
45                         }
46                         cout<<"Case "<<k+1<<":"<<endl<< max<<" "<<start[pos]+1<<" "<<pos+1<<endl; 
47                         if(k!=numbers-1)
48                                 cout<<endl;
49                         delete number;
50                         delete start;
51                         delete b;
52 
53 
54         }
55 
56 
57         return 0;
58 
59 
60 
61 }

 

ます。https://my.oschina.net/u/204616/blog/545274で再現

おすすめ

転載: blog.csdn.net/weixin_33701294/article/details/91989286