国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

PAT甲級1007

2019-11-10 23:34:32
字體:
來源:轉載
供稿:網友

1007. Maximum Subsequence Sum (25)

時間限制400 ms內存限制65536 kB代碼長度限制16000 B判題程序Standard作者CHEN, Yue

Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to be { Ni, Ni+1, ..., Nj } where 1 <= i <= j <= K. The Maximum Subsequence is the continuous subsequence which has the largest sum of its elements. For example, given sequence { -2, 11, -4, 13, -5, -2 }, its maximum subsequence is { 11, -4, 13 } with the largest sum being 20.

Now you are supposed to find the largest sum, together with the first and the last numbers of the maximum subsequence.

Input Specification:

Each input file contains one test case. Each case occupies two lines. The first line contains a positive integer K (<= 10000). The second line contains K numbers, separated by a space.

Output Specification:

For each test case, output in one line the largest sum, together with the first and the last numbers of the maximum subsequence. The numbers must be separated by one space, but there must be no extra space at the end of a line. In case that the maximum subsequence is not unique, output the one with the smallest indices i and j (as shown by the sample case). If all the K numbers are negative, then its maximum sum is defined to be 0, and you are supposed to output the first and the last numbers of the whole sequence.

Sample Input:
10-10 1 2 3 4 -5 -23 3 7 -21Sample Output:
10 1 4
#include<cstdio>#include<algorithm>using namespace std;const int maxn = 10010;int N[maxn];int d[maxn];int main(){	int K;	scanf("%d", &K);	for (int i = 0; i < K; i++)	{		scanf("%d", &N[i]);	}	d[0] = N[0];//邊界	for (int i = 1; i < K; i++)	{		d[i] = max(N[i], d[i - 1]+N[i]);//狀態轉移方程	}	int k=0;//由于是d[i]表示下標為i的數為尾的最大連續子序列的和,也就是說N[i]必須在其中	//那么d[K-1]不一定是最大的,需要對d[]進行遍歷找最大的,并記錄下標	for (int i = 0; i < K; i++)	{		if (d[i] > d[k])		{			k = i;		}	}	int sum = d[k];	int j = k;//j用來求最大子序列和的第一個數	if (sum != 0)//這個地方得注意下,若sum就等于0,j不需要自增	{		while (sum != 0)		{			sum -= N[j];			j--;		}		j++;	}	if (d[k] < 0)		PRintf("0 %d %d/n", N[0], N[K-1]);	else		printf("%d %d %d/n", d[k], N[j], N[k]);//注意題目說的是序列中的元素而不是下標	return 0;}
上一篇:網站過濾器Filter

下一篇:curl_errno 60

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鸡东县| 桐柏县| 五莲县| 大安市| 锦州市| 金昌市| 壤塘县| 吴堡县| 登封市| 砚山县| 芒康县| 昔阳县| 承德县| 车致| 沧州市| 开江县| 晋宁县| 宜宾县| 南川市| 荣昌县| 崇明县| 南华县| 汉沽区| 韶山市| 秦皇岛市| 曲沃县| 宁强县| 福建省| 陆河县| 巴青县| 广宁县| 洛南县| 广元市| 广丰县| 凤城市| 湘潭市| 剑阁县| 巴东县| 丰宁| 松江区| 乌审旗|