POJ 1952-最长下降子序列+去重

来源:互联网 发布:淘宝页面设计尺寸 编辑:程序博客网 时间:2024/06/05 14:18

题目链接

#include <iostream>  #include <cstring>#include <cstdio>#include <algorithm>#include <string>#include <string.h>#include <cmath>#include <sstream>#include <set>#include <map>#include <functional>#include <queue>#include <vector>using namespace std;const int maxn = 5010;int arr[maxn], dp[maxn], nums[maxn];int n;int main(){    cin >> n;    for (int i = 0; i < n; i++)    {        cin >> arr[i];        dp[i] = 1;        nums[i] = 1;    }    for (int i = 1; i < n; i++)    {        for (int j = i - 1; j >= 0; j--)        {            if (arr[i] < arr[j])            {                if (dp[i] < dp[j] + 1)                {                    dp[i] = dp[j] + 1;                    nums[i] = nums[j];                }                else if (dp[i] == dp[j] + 1)                {                    nums[i] += nums[j];                }            }            else if (arr[i] == arr[j])            {                if (dp[i] == 1)                    nums[i] = 0;                break;            }        }    }    int len = 0, times = 0;    for (int i = 0; i < n; i++)    {        len = max(dp[i], len);    }    for (int i = 0; i < n; i++)    {        if (dp[i] == len)            times += nums[i];    }    cout << len << " " << times << endl;    //system("pause");  }
原创粉丝点击