01-复杂度1 最大子列和问题
// 1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
cin.exceptions(ios_base::failbit);
int Size;
int tmp;
int sum = 0, maxSum = 0;
vector<int> vec;
cin>>Size;
for(int i = 0; i != Size; ++i){
cin>>tmp;
vec.push_back(tmp);
//cout<<vec[i]<<endl;
}
for(int i = 0; i != Size; ++i){
sum += vec[i];
cout<<"sum = "<<sum<<endl;
if(sum<0){
sum = 0;
}else{
if(sum > maxSum){
maxSum = sum;
}
}
}
cout<<maxSum<<endl;
return 0;
}
01-复杂度2 Maximum Subsequence Sum
// 2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int begin = 0, end = 0, begin_r = 0;
int Size;
int tmp;
int sum = 0, maxSum = 0;
int flag = 0;
vector<int> vec;
cin>>Size;
for(int i = 0; i != Size; ++i){
cin>>tmp;
vec.push_back(tmp);
}
for(int i = 0; i != Size; ++i){
sum += vec[i];
if(vec[i]>=0)
flag = 1;
if(sum<0){
sum = 0;
begin = i+1;
}else{
if(sum > maxSum){
maxSum = sum;
end = i;
begin_r = begin;
}
}
}
if(maxSum == 0){
if(flag==0)
cout<<"0 "<<vec[0]<<" "<<vec[Size-1];
else
cout<<"0 0 0";
}else{
cout<<maxSum<<" "<<vec[begin_r]<<" "<<vec[end];
}
return 0;
}