Once Again...

题目链接

题意

给n个数,然后T次循环后组成一个新的数列,求这个数列的最长不递减子序列。

思路

因为最多就100个元素,所以当m<=100的时候直接暴力求最长不递减子序列,然后当m>=100的时候,因为每个循环节最少可以取1个元素,所以只要100个循环节就可以包括所有的数,然后再往里面插入剩下的一个在当前路径下在每段重复有最多的元素,也就是\((m-100)*cnt[k]\)(k就是那个数);复杂度(\(n^2\));

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL mod = 1e9+7;
int a[100005];
int dp[100005];
int cnt[100005];
int id[100005];
int main(void)
{
int n,m;
scanf("%d %d",&n,&m);
for(int i = 0;i < n;i++)
scanf("%d",&a[i]);
int maxx = 1;
if(m <= 100)
{
for(int i = n;i < n*m;i++)
{
a[i] = a[i-n];
}
dp[0] = 1;
for(int i = 1;i < n*m;i++)
{ dp[i] = 1;
for(int j = 0;j < i;j++)
{
if(a[i] >= a[j])
dp[i] = max(dp[j] + 1,dp[i]);
}
maxx = max(maxx,dp[i]);
}
}
else
{
for(int i = n;i < n*100;i++)
a[i] = a[i-n];
for(int i = 0;i < n;i++)
cnt[a[i]]++;
dp[0] = 1;
for(int i = 1;i < n*100;i++)
{ dp[i] = 1;
for(int j = 0;j < i;j++)
{
if(a[i] >= a[j])
{
if(dp[i] < dp[j] + 1)
{
dp[i] = dp[j] + 1;
id[i] = j;
}
}
}
int c = i;
while(c!=0)
maxx = max(maxx,dp[i] + (m-100)*cnt[a[c]]),c = id[c];
}
}
printf("%d\n",maxx);
return 0;
}

随机推荐

  1. 学习 DDD - 通用语言的模式

    大家好,我是霸戈,这周学习了一些关于领域驱动设计的知识 ,对比较深刻的地方做了不少笔记,分享给大家. 在日常需求讨论的时候,经常会碰到一个需求会议开了一个多小时还没有达成共识.作为业务方(领域专家)明 ...

  2. 大数据学习day22------spark05------1. 学科最受欢迎老师解法补充 2. 自定义排序 3. spark任务执行过程 4. SparkTask的分类 5. Task的序列化 6. Task的多线程问题

    1. 学科最受欢迎老师解法补充 day21中该案例的解法四还有一个问题,就是当各个老师受欢迎度是一样的时候,其排序规则就处理不了,以下是对其优化的解法 实现方式五 FavoriteTeacher5 p ...

  3. What happens when more restrictive access is given to a derived class method in C++?

    We have discussed a similar topic in Java here. Unlike Java, C++ allows to give more restrictive acc ...

  4. Spring Batch : 在不同steps间传递数据

    参考文档: How can we share data between the different steps of a Job in Spring Batch? Job Scoped Beans i ...

  5. 【Java 8】函数式接口(二)—— 四大函数接口介绍

    前言 Java8中函数接口有很多,大概有几十个吧,具体究竟是多少我也数不清,所以一开始看的时候感觉一脸懵逼,不过其实根本没那么复杂,毕竟不应该也没必要把一个东西设计的很复杂. 几个单词 在学习了解之前 ...

  6. MFC入门示例之访问对话框控件的7种方法

    方法一: 1 //方法一 2 void CMFCApplication2Dlg::OnBnClickedButton1() 3 { 4 int num1, num2, num3; 5 TCHAR ch ...

  7. 【Python】数据处理分析,一些问题记录

    不用造轮子是真的好用啊 python中单引号双引号的区别 和cpp不一样,cpp单引号表示字符,双引号表示字符串,'c'就直接是ascii值了 Python中单引号和双引号都可以用来表示一个字符串 单 ...

  8. 阿里云发布CloudOps白皮书,ECS自动化运维套件新升级

    12月10 日,2021云上架构与运维峰会上,阿里云发布业界首部<云上自动化运维白皮书>(简称CloudOps白皮书),并在其中提出了CloudOps成熟度模型.同时,阿里云还宣布了ECS ...

  9. JavaWeb的三大作用域

    三大作用域描述 名称 类型 描述 request HttpServletRequest 将数据放在请求作用域中,在一次请求中实现数据的共享,比如请求转发 session HttpSession 将数据 ...

  10. [BUUCTF]REVERSE——[ACTF新生赛2020]usualCrypt

    [ACTF新生赛2020]usualCrypt 附件 步骤: 例行检查,无壳,32位程序 32位ida载入,直接看main函数 逻辑很简单,一开始让我们输入一个字符串,然后该字符串经过sub_4010 ...