动态规划
最大子段和(递归+备忘录)
//最大字段和
#include<iostream>
#define N 6
using namespace std;
int data[N]={-2,11,-4,13,-5,-2};
int memory[N];
int sum;
int max(int a,int b){
return a>b?a:b;
}
//递归+备忘录
int dp(int i){
if(memory[i]!=0)
return memory[i];
if(i==0)
return data[0];
memory[i]=max(data[i],dp(i-1)+data[i]);
if(sum<memory[i])
sum=memory[i];
return memory[i];
}
void print(int a[]){
for(int i=0;i<N;i++)
cout<<a[i]<<"\t";
cout<<endl;
}
int main(){
dp(5);
cout<<sum<<endl;
print(memory);
}