time limit per test1 second

memory limit per test256 megabytes

inputstandard input

outputstandard output

You are given an array of positive integers a1, a2, …, an × T of length n × T. We know that for any i > n it is true that ai = ai - n. Find the length of the longest non-decreasing sequence of the given array.

Input

The first line contains two space-separated integers: n, T (1 ≤ n ≤ 100, 1 ≤ T ≤ 107). The second line contains n space-separated integers a1, a2, …, an (1 ≤ ai ≤ 300).

Output

Print a single number — the length of a sought sequence.

Examples

input

4 3

3 1 4 2

output

5

Note

The array given in the sample looks like that: 3, 1, 4, 2, 3, 1, 4, 2, 3, 1, 4, 2. The elements in bold form the largest non-decreasing subsequence.

【题目链接】:http://codeforces.com/contest/583/problem/D

【题解】



每次都选出现最多个数的数?

3 4 1 2

难道你要随便选一个数?

显然

12 3 4 4 4 4 4…

更优

其中1、2是在a[1..n]中选的,3、4是在a[n+1..2n]中选的;

当然你也可以这样选

1 2 2 2 2 ….. 2 2 3 4



1 2 3 3 3 3 3 3 …. 3 3 3 4

所以不能直接选出现次数最多的数字;

还得用一些“聪明的技巧”

聪明的技巧当然就是DP了;

可以考虑

5 6 3 4 1 2

可以看到;

我们第一次会选 12

第二次会选 3 4

第三次会选 5 6

所以最少把原序列复制6/2==3次才行;

在这n*(n/2)个数字里面进行DP;



6 5 4 3 2 1咋办?

这种情况我们完全不用想;

直接随便取一个数字就行了;

然后每次都选那个数字;

又例如

5 6 4 3 2 1

则第一次选5 6 其余的都选6就好:

然后复制6/2==3次完全够了

则进行DP的时候会选出

5 6 6 6

剩余的全部填6;

又例如

5 5 6 4 3 2 1

进行6/2==3次DP

会选出

5 5 5 5 5 5 6

其他的每次都选两次5选在最前面就好;

即我们选择的出现次数最多的数字是肯定有地方放的;所以不用担心;

总结一下就是

把n个数字复制n/2次;然后对这n*(n/2)个数字进行DP;求出这n*(n/2)个数字的最长不下降子序列;

(求n*(n/2)个数字的最长不下降子序列的时候只要往前找n个位置更新f[i]就可以了,具体的自己想,很简单的);

然后在初始的n个数字中选择出现次数最多的数字的次数key;

答案就是DP算出来的最长+(t-(n/2))*key

如果n==1要特判下,不然会搞笑.



【完整代码】

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 5010;

int n,t,a[MAXN],lim,f[MAXN],ans = 0,mf = 0,b[350] = {0};

int main()
{
//freopen("F:\\rush.txt","r",stdin);
scanf("%d%d",&n,&t);
for (int i = 1;i <= n;i++)
{
scanf("%d",&a[i]);
b[a[i]]++;
mf = max(mf,b[a[i]]);
}
lim = n*min(n/2,t);
if (n==1)
lim = n;
for (int i = n+1;i <= lim;i++)
a[i] = a[i-n];
for (int i = 1;i <= lim;i++)
{
f[i] = 1;
for (int j = 1;j <= i-1;j++)//faster algorithm ->for (int j = max(1,i-n);j<=i-1;j++)
if (a[j] <= a[i])
f[i] = max(f[i],f[j]+1);
ans = max(ans,f[i]);
}
if (n==1)
n++;
if (t <= (n/2))
printf("%d\n",ans);
else
printf("%d\n",ans+(t-(n/2))*mf);
return 0;
}

【17.07%】【codeforces 583D】Once Again...的更多相关文章

  1. 【黑金教程笔记之008】【建模篇】【Lab 07 数码管电路驱动】—笔记

    实验七的目的是设计实现最大为99数字在2个数码管上.采用同步动态扫描.即行信号和列信号同步扫描.这里数码管是共阳极的.选择端口也是共阳极的. 模块: /************************ ...

  2. 【 BowWow and the Timetable CodeForces - 1204A 】【思维】

    题目链接 可以发现 十进制4 对应 二进制100 十进制16 对应 二进制10000 十进制64 对应 二进制1000000 可以发现每多两个零,4的次幂就增加1. 用string读入题目给定的二进制 ...

  3. 【24.17%】【codeforces 721D】Maxim and Array

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  4. 【15.07%】【codeforces 625A】Guest From the Past

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  5. 【42.07%】【codeforces 558A】Lala Land and Apple Trees

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  6. 【40.17%】【codeforces 569B】Inventory

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  7. 【codeforces】【比赛题解】#855 Codefest 17

    神秘比赛,以<哈利波特>为主题……有点难. C题我熬夜切终于是写出来了,可惜比赛结束了,气啊. 比赛链接:点我. [A]汤姆·里德尔的日记 题意: 哈利波特正在摧毁神秘人的分灵体(魂器). ...

  8. 【codeforces 514D】R2D2 and Droid Army

    [题目链接]:http://codeforces.com/contest/514/problem/D [题意] 给你每个机器人的m种属性p1..pm 然后r2d2每次可以选择m种属性中的一种,进行一次 ...

  9. 【codeforces 799D】Field expansion

    [题目链接]:http://codeforces.com/contest/799/problem/D [题意] 给你长方形的两条边h,w; 你每次可以从n个数字中选出一个数字x; 然后把h或w乘上x; ...

随机推荐

  1. CODEVS——T 1993 草地排水 USACO

    http://codevs.cn/problem/1993/  时间限制: 2 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 De ...

  2. UIViewController所有API的学习。

    <欢迎大家加入iOS开发学习交流群:QQ529560119> /*      UIViewController is a generic controller base class tha ...

  3. Redis源代码分析(八)--- t_hash哈希转换

    在上次的zipmap分析完之后,事实上关于redis源码结构体部分的内容事实上已经所有结束了.由于以下还有几个和结构体相关的操作类,就页把他们归并到struct包下了.这类的文件有:t_hash.c, ...

  4. Python 极简教程(三)数据类型

    每种语言都有各种数据类型.这就像在现实生活中,我们计数的时候需要用到数字,在表述金额.重量.距离等需要精确计数时用到小数,在日常交谈中要用文字,等等.在计算机语言中,为了表述不同的情况,也需要用到各种 ...

  5. 安装filezilla client报错libgnutls版本旧

    http://blog.csdn.net/mofabang/article/details/9212217

  6. &lt;九度 OJ&gt;题目1012:畅通project

    题目描写叙述: 某省调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.省政府"畅通project"的目标是使全省不论什么两个城镇间都能够实现交通(但不一定 ...

  7. js进阶 13-2 jquery动画滑动效果哪些注意事项

    js进阶 13-2 jquery动画滑动效果哪些注意事项 一.总结 一句话总结:滑动里面这里up是隐藏,down是显示. 1.jquery动画默认的两个切换效果是什么(swing默认和linear的区 ...

  8. Redis 哨兵(sentinel)模式集群配置(5.0.3版本)

    一.准备工作 1.系统环境:centos6.4 2.服务器六台(1主5从): 192.168.1.161(master) 192.168.1.162(slave) 192.168.1.163(slav ...

  9. xmppframework开发基础

    xmppframework是XMPP协议的一个objective-c实现. 要了解xmppframework, 从这里開始吧:https://github.com/robbiehanson/XMPPF ...

  10. [RxJS] Multicasting shortcuts: publish() and variants

    Because using multicast with a new Subject is such a common pattern, there is a shortcut in RxJS for ...