您的位置:首页 > 产品设计 > UI/UE

1007. Maximum Subsequence Sum (25)

2015-05-16 09:58 246 查看
不使用动态规划的方法。被自己蠢哭了,一直有个用例不AC,发现是判断完毕忘记返回。。。。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

#include <iostream>

#include <math.h>

using namespace std;

int main()

{

int num;

cin >> num;

int *data = new int[num];

bool bNegative = true;

for (int i = 0; i < num; i++)

{

cin >> data[i];

if (data[i] >= 0)

bNegative = false;

}

if (bNegative)

{

cout << "0 " << data[0] << " " << data[num - 1];

return
0;

}

int iStart = 0,tmp_j=0;

int iOutput = data[0], out_i = 0, out_j = 0;

while (iStart < num)

{

if (data[iStart] < 0)

{

iStart++;

continue;

}

else

{

tmp_j = iStart;

int tmp_max = data[iStart];

int i;

for (i = iStart+1; i < num; i++)

{

if (data[i] > 0)

{

tmp_max += data[i];

tmp_j = i;

}

else

{

int sum = data[i], iMark = i,tmp_sum=data[i];

for (int j = i+1; j < num; j++)

{

tmp_sum += data[j];

if (tmp_sum > sum)

{

sum = tmp_sum;

iMark = j;

}

}

if (sum > 0)

{

tmp_max += sum;

tmp_j = iMark;

}

break;

}

}

//iStart = num;

if (tmp_max > iOutput)

{

out_i = iStart;

out_j = tmp_j;

iOutput = tmp_max;

}

//找出第一个值大于零的数,没有则结束程序

iStart = num;

for (int j = i; j < num; j++)

{

if (data[j] >= 0)

{

iStart = j;

break;

}

}

}

}

cout << iOutput << " " << data[out_i] << " " << data[out_j];

return 0;

}

使用动态规划的代码

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <algorithm>

#include <iostream>

using namespace std;

int main()

{

int num;

cin >> num;

int *data = new int[num];

bool bNegative = true;

for (int i = 0; i < num; i++)

{

cin >> data[i];

if (data[i] >= 0)

bNegative = false;

}

if (bNegative)

{

cout << "0 " << data[0] << " " << data[num - 1];

return 0;

}

int tmp = 0, max = data[0], i_begin = 0, i_end = 0;

int mark_b = 0, mark_e = 0;

for (int i = 0; i < num; i++)

{

tmp += data[i];

if (tmp < 0)

{

tmp = 0;

mark_b = i+1; mark_e = i+1;

}

else

{

mark_e = i;

if (tmp > max)

{

max = tmp;

i_begin = mark_b; i_end = mark_e;

}

}

}

cout << max << " " << data[i_begin] << " " << data[i_end];

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: