Codeforces 583D. Once Again... (LIS变形)】的更多相关文章

题目链接:http://codeforces.com/contest/583/problem/D 给你t个长度为n的数组.问你最长不下降子序列的长度. 一开始用第一个n数组的lis和最后一个n数组的lis和中间最多相同的数字出现的个数相加.这是错的,比如5 6 3 4 1 2 可以发现数组的长度很小,有一个循环节,最多是n吧.所以t <= n只要暴力求解.大于的话,再加上数字出现的最大次数*(t-n) #include <bits/stdc++.h> using namespace st…
题意:给你n个数(n<=100,ai<=300)  一个T,求n重复T次的最长非递减子序列. 题解:我直接考虑4 3 2 1 的例子,当其重复4次时会出现1 2 3 4 的子序列 ,此时再怎么重复,这也是最长的递增序列,无非是多出(T-n)个1. 所以直接不完全(不会证明地)归纳处一个答案:ans=T>n?(T-n)*M+lis(a,n*n):lis(a,n*T) .M是n个数中重复次数最多的数,lis函数输出a数列的最长非递减子序列.(考虑如果重复最多的数并非最长子序列的起始数的情况:…
题目描述: 在初试即将开始的最后一段日子里,laxtc重点练习了英语阅读的第二部分,他发现了一个有意思的情况.这部分的试题最终的答案总是如下形式的:1.A;2.C;3.D;4.E;5.F.即共有六个空格,每个空格填入一个相应的字母代表这个空格他所选择的答案,且空格中的字母不存在重复.若每个空格选择的答案都是严格递增的,则laxtc认为这个答案是和谐的,如1.A;2.C;3.D;4.E;5.F;反之,若答案中存在不递增的情况,则他认为这组答案是不和谐的,如1.A;2.C;3.B;4.E;5.F;l…
Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 31458    Accepted Submission(s): 14128 Problem Description Nowadays, a kind of chess game called “Super Jumping!…
[链接]:https://cn.vjudge.net/problem/UVA-437 [题意]:给你n个立方体,让你以长宽为底,一个个搭起来(下面的立方体的长和宽必须大于上面的长和宽)求能得到的最长高,立方体能翻来覆去交换长宽高来用. [代码]: #include<bits/stdc++.h> using namespace std; const int INF = 1e6; ; int n,m,T,c,ca; struct node { int x, y, z; }a[N]; int d[N…
题意: 给出一个序列,删掉它的一个连续子序列(该子序列可以为空),使得剩下的序列有最长的连续严格递增子序列. 分析: 这个可以看作lrj的<训练指南>P62中讲到的LIS的O(nlogn)的优化变形过来的问题. 预处理: Li是第i个元素Ai向左延伸的最大长度,即[i, i + Li - 1]是一个递增区间 同样地,Ri是第i个元素向右延伸的最大长度. 我们,可以枚举i, j(j<i 且 Aj < Ai),这样就可以把Aj和Ai“拼接”起来,所得到的最长连续递增子列的长度就是Lj…
题意:给一个非负整数的数列,其中0可以变成任意整数,包括负数,求最长上升子序列的长度. 题解:LIS是最简单的DP了,但是变形之后T^T真的没想到.数据范围是10^5,只能O(nlogn)的做法,所以一直在想0要插到哪里. 题解是先求不包括0的数列的LIS,再将0插入其中,由于直接插入不会保证递增,对其他数字进行处理,就是减去这个数字前面0的个数. 这个可以理解成优先选择0,所以一个数如果要被选中,就要大于中间这个0插入后变成的数,当然不用担心这样不对,因为如果一个数因为处理后不能选进,其实0也…
这是LIS的变形,题意是求一个序列中去掉某个连续的序列后,能得到的最长连续递增序列的长度. 用DP的解法是:吧这个序列用数组a来记录,再分别用两个数组f记录以i结尾的最长连续递增序列的长度,g[i]记录以i开头的最长连续递增序列.然后像求DP求LIS一样遍历整个序列求出i前面所有小于a[i]的元素中以该元素结尾的最长序列f[j], 那么 dp[i] = g[j] + f[i], 这样时间复杂度为O(n^2). 由于和普通的LIS类似,所以可以利用LIS的优化方法把该题的时间复杂的优化到O(nlo…
本题大意:给定一定数量的数对,每个数保存着一只老鼠的质量和速度,让你求出一个最长序列,这个序列按照质量严格递增,速度严格递减排列,让你输出这个序列的最长长度,并且输出组成这个最长长度的序列的对应的老鼠的编号... 本题思路:看到最长序列,可以想到是LIS的变形,然后需要打印路径,那我们只需要回溯思想数组保存即可.很基础的一道题目......记得找到最后的那只老鼠... 参考代码: #include <iostream> #include <cstring> #include <…
Alignment Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 13465   Accepted: 4336 Description In the army, a platoon is composed by n soldiers. During the morning inspection, the soldiers are aligned in a straight line in front of the cap…