[洛谷] P1091 合唱队形

[洛谷] P1091 合唱队形_第1张图片

思路很好想 从前从后两遍最长上升子序列 

而且要用n方的算法 nlogn不易记录当前位值

数据不严谨 题目要求是先递增后递减序列

结果数据给了全递增数列 也算合法 真的是醉醉的

//#pragma GCC optimize(2)
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long ll;
 
const int MAXN = 1e6 + 10;

int arr[MAXN] = {0}, n, ans = 1;

int head[MAXN], tail[MAXN];

void Lis()
{
    for(int i = 0; i < n; i++)
        for(int j = 0; j < i; j++)
            if(arr[j] < arr[i]) 
                head[i] = max(head[i], head[j] + 1);
}

void Lisi()
{
    for(int i = n - 1; i >= 0; i--)
        for(int j = n - 1; j > i; j--)
            if(arr[j] < arr[i]) 
                tail[i] = max(tail[i], tail[j] + 1);
}

int main()
{
    ios::sync_with_stdio(false);
 
    cin.tie(0);     cout.tie(0);
 
    cin>>n;

    for(int i = 0; i < n; i++)
        cin>>arr[i], head[i] = 1, tail[i] = 1;

    Lis();

    Lisi();

//    for(int i = 0; i < n; i++)
//    {
//        cout<

 

你可能感兴趣的:([Dynamic,模拟)