HDU1087 Super Jumping! Jumping! Jumping!

2017年8月13日

给你一个n个数,让你在这n个数的所有递增子序列中找出一个和最大的递增子序列,把这个和输出.

就是最长递增子序列问题的变形.dp[i] = max(dp[i], dp[j] + a[i] | a[i] > a[j])

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087

#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
int a[N];
int dp[N];
int main()
{
    int n;
    while (~scanf("%d", &n) && n) {
        for (int i = 0; i < n; i++) {
            scanf("%d", a + i);
        }
        memset(dp, 0, sizeof(dp));
        int ans = 0;
        for (int i = 0; i < n; i++) {
            dp[i] = a[i];
            for (int j = 0; j < i; j++) {
                if (a[i] > a[j]) {
                    dp[i] = max(dp[i], dp[j] + a[i]);
                }
            }
            ans = max(dp[i], ans);
        }
        printf("%d\n", ans);
    }
    return 0;
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注