ZOJ 2136 Longest Ordered Subsequence(简单DP)

来源:互联网 发布:网站关键词优化智搜宝 编辑:程序博客网 时间:2024/05/01 03:00

用dp的思想,不难。


然后坑我的一点就是,dp[1]=1这个,要写在for循环外面,不然一直WA,卡了我n久。。。。玄学。。。

要多写dp~fighting~

ps:这个题解法可以优化到nlogn

#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>using namespace std;int arr[1006];int dp[1006];int main(void) {  int N, n, Max, res;  scanf("%d", &N);  while (N--) {    memset(arr, 0, sizeof(arr));    memset(dp, 0, sizeof(dp));    scanf("%d", &n);    for (int i = 1; i <= n; i++) {      scanf("%d", &arr[i]);    }    dp[1] = 1;    for (int i = 2; i <= n; i++) {      Max = 0;      for (int j = 1; j < i; j++) {        if (arr[i] > arr[j]) {          Max = max(dp[j], Max);        }      }      dp[i] = Max + 1;    }    res = 0;    for (int i = 1; i <= n; i++) {      if (res < dp[i])        res = dp[i];    }    printf("%d\n", res);    if (N)      printf("\n");  }  return 0;}