最大字段和问题求的是一组数字中,连续一段数字和的最大值
股票问题求的是某一天给钱,之后某一天收钱,计算他们差的最大值
这两个思想和代码差不多,都用的是动态规划,一个for循环就搞定了~
最大子段和问题:
#include <iostream>
using namespace std;
int main()
{
int x,n=0;
int a[1000];
while(cin>>x)
{
a[n++]=x;
if(cin.get()=='\n')
break;
}
int sum=0,maxsum=0;
for(int i=0;i<n;i++)
{
if(sum+a[i]<0)
sum=0;
else
sum+=a[i];
if(maxsum<sum)
maxsum=sum;
}
cout<<maxsum<<endl;
return 0;
}
样例输入:-2 11 -4 13 -5 2 输出:20
买卖股票问题:
#include <iostream>
using namespace std;
int main()
{
int x,n,i;
int a[1000];
while(cin>>x)
{
a[i++]=x;
if(cin.get()=='\n')
break;
}
n=i;
int maxprofit=0,start=0,profit;
for(int i=0;i<n;i++)
{
if(a[start]>a[i])
start=i;
profit=a[i]-a[start];
if(profit>maxprofit)
maxprofit=profit;
}
cout<<maxprofit<<endl;
return 0;
}
样例输入:7 1 5 3 6 4 输出:5