题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087
题意就是给你n个数,找出某个序列的最大和,这个序列满足依次增大的规则;
哎,这个题之前做过,但是一点印象都没有但是自己写出来了,估计当时写的时候也不知道为什么这样写吧,事实证明,题做多了自然就懂了;
我是拿做上升子序列的想法来做的。。。
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define N 1100 #define INF 0xfffffff int main() { int n, a[N], dp[N], Max; while(scanf("%d", &n), n) { memset(a, 0, sizeof(a)); memset(dp, 0, sizeof(dp)); for(int i=1; i<=n; i++) { scanf("%d", &a[i]); } Max = 0; for(int i=1; i<=n; i++) { dp[i] = a[i]; for(int j=1; j<=i; j++) { if(a[i]>a[j]) dp[i] = max(dp[i], dp[j]+a[i]); } Max = max(Max, dp[i]); } printf("%d ", Max); } return 0; }