hdu 1087
dp水题,不解释
#include <iostream> #include <cstdio> using namespace std; const int maxn=1000+10; int v[maxn]; long long sumv[maxn]; int main() { int n; while(~scanf("%d",&n)&&n) { int i,j; for(i=1;i<=n;i++) scanf("%d",&v[i]); memset(sumv,0,sizeof(sumv)); long long maxv=0; sumv[1]=v[1]; sumv[0]=0; for(i=2;i<=n;i++) { long long tmax=v[i]; for(j=1;j<i;j++) { if(v[j]<v[i]&&v[i]+sumv[j]>tmax) tmax=v[i]+sumv[j]; } sumv[i]=tmax; } for(i=1;i<=n;i++) if(sumv[i]>maxv) maxv=sumv[i]; printf("%I64d\n",maxv); } return 0; }