Notice: Undefined index: name in /usr/www/lib/views/home/viewtitle.html on line 188
-阅读程序 第 17 题
#include <algorithm>
#include <iostream>
using namespace std;

int n,a[1005] ;

struct Node
{
	int h, j, m, w;
	
	Node (const int _h, const int _j, const int _m, const int _w) :
		h (_h) , j (_j) , m (_m) ,w (_w)
	{}
		
	Node operator+ (const Node &o) const
	{
		return Node(
			max(h,w+o.h) ,
		    max(max (j,o.j) ,m +o.h) ,
		    max(m+o.w,o.m) ,
		    w+o.w) ;
	}
} ;

Node solve1 (int h,int m)
{
	if (h>m)
		return Node (-1, -1, -1, -1) ;
	if (h==m)
		return Node(max(a[h], 0) , max(a[h], 0) , max(a[h], 0) ,a[h]) ;
	int j= (h + m) >> 1;
	return solve1 (h, j) + solve1(j+1, m);
}

int solve2 (int h, int m)
{
	if (h>m)
		return -1;
	if (h==m)
		return max(a[h], 0) ;
	int j= (h+m) >> 1;
	int wh=0,wm =0;
	int wht=0,wmt=0;
	for (int i = j; i >= h; i--) {
		wht +=a[i] ;
		wh =max(wh,wht) ;
	}
	for (int i = j+1; i <= m; i++){
		wmt +=a[i] ;
		wm=max(wm,wmt) ;
	}		
	return max (max(solve2(h, j), solve2(j+1,m)) ,wh + wm) ;
}

int main (  )
{
	cin >> n;
	for (int i=1; i <= n; i++) cin >> a[i];
	cout << solve1(1, n).j << endl;
	cout << solve2(1, n) << endl;
	return 0;
}
假设输入的所有数的绝对值都不超过1000,完成下面的判断题和单选题:
● 判断题
第 1 题 程序总是会正常执行并输出两行两个相等的数。( )
第 2 题 第28行与第38行分别有可能执行两次及以上。( )
第 3 题 当输入为“5-10 11-95-7”时,输出的第二行为“7”。( )
● 单选题
第 4 题 solve1(1, n)的时间复杂度为( )。
A. $Θ(logn)$
B. $Θ(n)$
C. $(Θnlogn)$
D. $Θ(n^2)$
第 5 题 solve2 (1,n) 的时间复杂度为()。
A. $Θ(logn)$
B. $Θ(n)$
C. $Θ(nlogn)$
D. $Θ(n^2)$
第 6 题 当输入为“10 -3 2 10 0 -8 9 -4 -5 9 4”时,输出的第一行为( )。

解答部分以后会开放。