[cpp] /****************** 31ms 256k 2013.2.2 http://acm.hdu.edu.cn/showproblem.php?pid=1087 ****************/ #include <iostream> #include <cstdio> #include <cstring> int digit[1005]; int tmp[1005]; int biggest(int n) { int res; int i,k; res = 0; tmp[0] = digit[0]; for(i=1 ;i<n; i++) { ///每一次循環之後tmp數組中存放到當前位置為止的最大值 tmp[i] = digit[i]; for(k=0; k<i; k++) { ///如果符合條件就更新數組 if(digit[i]>digit[k] && tmp[i]<tmp[k]+digit[i]) { tmp[i] = tmp[k] + digit[i]; } } if(res < tmp[i]) { res = tmp[i]; } } return res; } int main() { int n,i; while(scanf("%d",&n)&&n) { for(i=0;i<n;i++) { scanf("%d",&digit[i]); } printf("%d\n",biggest(n)); } return 0; }