http://acm.hdu.edu.cn/showproblem.php?pid=1087
最大递增子序列,不需要连续。能跳到i的条件是i>j && num[i] > num[j]。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1010;
int dp[N],num[N];
int main(){
// freopen("in.txt", "r", stdin);
int n;
while(scanf("%d",&n) != EOF && n){
for(int i=1; i<=n; i++)
scanf("%d",&num[i]);
memset(dp, 0, sizeof(dp));
for(int i=1; i<=n; i++)
for(int j=0; j<i; j++)
if(num[i] > num[j])
dp[i] = max(dp[i], dp[j] + num[i]);
int ans = 0;
for(int i=1; i<=n; i++)
ans = max(ans, dp[i]);
printf("%d\n",ans);
}
return 0;
}