nyoj--79 拦截导弹(dp)

nyoj 79

题解

单调递减最长子序列,把数组翻转过来就是一个单调递增最长子序列问题。

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

const int maxn = 25;
int   dp[maxn], h[maxn];
int   n;

int main()
{
    //fstream cin("data.in");
    int t;
    for(cin >> t; t--; )
    {
        cin >> n;
        for(int i = 0; i < n; ++i) cin >> h[i];
        memset(dp, 0, sizeof(dp));
        for(int i = 0; i < n; ++i)
        {
            dp[i] = 1;
            for(int j = 0; j < i; ++j)
            {
                if(h[i] < h[j])
                    dp[i] = max(dp[i], dp[j] + 1);
            }
        }
        int ans = 0;
        for(int i = 0; i < n; ++i) ans = max(ans, dp[i]);
        cout << ans << endl;
    }
    return 0;
}

你可能感兴趣的:(动态规划)