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;
}
#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;
}
相关文章推荐
- 1007. Maximum Subsequence Sum (25)
- 1007. Maximum Subsequence Sum (25)
- PAT (Advanced Level) 1007. Maximum Subsequence Sum (25) 解题报告
- 1007. Maximum Subsequence Sum (25)
- 1007. Maximum Subsequence Sum (25)
- Python 实现1007. Maximum Subsequence Sum (25)
- 1007. Maximum Subsequence Sum (25)
- 【PAT甲级】【C++】1007. Maximum Subsequence Sum (25)
- 1007. Maximum Subsequence Sum (25)
- 1007. Maximum Subsequence Sum (25)
- PAT (Advanced Level) 1007. Maximum Subsequence Sum (25) dp
- 【PAT】1007. Maximum Subsequence Sum (25)
- 1007. Maximum Subsequence Sum (25) 第二种想法
- 1007. Maximum Subsequence Sum (25)
- 1007. Maximum Subsequence Sum (25)
- PAT 1007. Maximum Subsequence Sum (25)
- PAT-1007. Maximum Subsequence Sum (25)
- pat 1007. Maximum Subsequence Sum (25)
- 1007. Maximum Subsequence Sum (25)
- 1007. Maximum Subsequence Sum (25)