//考察点dp
//思路:这里我使用dp数组,dp[i]表示到i位置之前的最大值(包括i),最后我们只需要重新遍历一下数组dp获得最大值,即为所求结果。
//提交情况:使用g++提交compiler Error,使用c++提交AC
//注:这道题都是正整数的情况,没有负数情况
//AC code
#include<iostream>
using namespace std;
//表示该位置之前(包括该位置)的最大和
int dp[1005];
int a[1005];
int main(){
int n;
while(scanf("%d",&n)&&n){
int i,j;
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
}
a[0]=0;
int max=-9999999999;
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++){
max=-9999999999;
for(j=0;j<i;j++){
if(a[i]>a[j]&&dp[j]+a[i]>max){
max=dp[j]+a[i];
}
}
dp[i]=max;
}
max=-9999999999;
for(i=1;i<=n;i++){
if(dp[i]>max)
max=dp[i];
}
cout<<max<<endl;
}
return 0;
}
hdu 1087 dp
最新推荐文章于 2018-09-01 16:47:16 发布