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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

PAT甲級1007

2019-11-10 22:17:22
字體:
供稿:網(wǎng)友

1007. Maximum Subsequence Sum (25)

時間限制400 ms內(nèi)存限制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]);//狀態(tài)轉(zhuǎn)移方程	}	int k=0;//由于是d[i]表示下標(biāo)為i的數(shù)為尾的最大連續(xù)子序列的和,也就是說N[i]必須在其中	//那么d[K-1]不一定是最大的,需要對d[]進(jìn)行遍歷找最大的,并記錄下標(biāo)	for (int i = 0; i < K; i++)	{		if (d[i] > d[k])		{			k = i;		}	}	int sum = d[k];	int j = k;//j用來求最大子序列和的第一個數(shù)	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]);//注意題目說的是序列中的元素而不是下標(biāo)	return 0;}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 桦甸市| 祥云县| 兖州市| 淳化县| 鄂温| 彭山县| 尤溪县| 彭阳县| 凌云县| 天全县| 金寨县| 会宁县| 平遥县| 苏尼特左旗| 佳木斯市| 昌乐县| 青海省| 响水县| 厦门市| 西吉县| 那坡县| 南投市| 调兵山市| 东安县| 万宁市| 周宁县| 广元市| 长治县| 泸定县| 韩城市| 康乐县| 时尚| 武义县| 上杭县| 绥中县| 故城县| 阿巴嘎旗| 琼海市| 庆城县| 赞皇县| 华池县|