简单的dp,最优子结构是dp[i],即从0~i来看,是的dp[i]最大,然后找到最大中的最大就可以了,
转移方程是:dp[i]=max{dp[i],dp[j]+value[i]},注意这里有两个判断条件。
#include"iostream"#include"stdio.h"#include"string.h"#include"algorithm"#define mx 1010using namespace std;__int64 n;__int64 value[mx];__int64 dp[mx];int main(){ __int64 i,j,ans; while(cin>>n,n) { for(i=1;i<=n;i++) cin>>value[i]; memset(dp,0,sizeof(dp)); value[0]=0; ans=0; for(i=1;i<=n;i++) { for(j=0;j dp[i]) dp[i]=dp[j]+value[i]; if(dp[i]>ans) ans=dp[i]; } } } cout<<