例如:求数组a[]={8,2,10,3,9}中,数组元素的最大差(只能下标大的元素减去下标小的元素,比如10-2,9-2,不能10-3);
#include <iostream>
#include <string.h>
using namespace std;
/*
*关键在于dp函数的理解,这个程序中的dp是我归类为结果在n个结果中最优的那个
*dp[i]表示以a[i]结束来作为减数的最大差,也就是用a[i]减去前面的最小值。
*后面的就好理解了,
*/
int main()
{
const int len=5;
int a[len]={8,2,10,3,9};
int dp[100];
memset(dp,0,sizeof(dp));
//len>=2, so dp[1]=a[1]-a[0], dp[0] doesn't exist!
dp[1]=a[1]-a[0];
for(int i=2;i<len;i++)
{
if(dp[i-1] <= 0)//a[i] is the min
dp[i]=a[i]-a[i-1];
else
dp[i]=dp[i-1]+a[i]-a[i-1];
}
int max=0x80000000;
for(int i=1;i<len;i++)
if(dp[i]>max)
max=dp[i];
cout<<max<<endl;
return 0;
}