首页 > 子序列
头像 ThinkofBlank
发表于 2020-04-23 11:19:46
update:新方法,树状数组优化dp,复杂度 一道很简单的dp+数论题。。。 我们设dp[i]表示以i结尾的子序列中成立的方案数 那么,就有转移: 答案就很显然了: 于是这题就基本做完了,不过,麻烦的是,你需要做这个式子 如果我们直接算,最大的情况就可能搞出个,然后爆炸(当然,你要打个高精也没 展开全文
头像 肖战公关团队
发表于 2020-04-24 18:16:43
Solution 这公式看起来挺吓人,但转换一下就发现好像并没有那么难。 会发现后面式子中的是原来数组中的下标,与新构成的子序列并没有任何关联。 那么显然用高中导数题中经常使用的分离参数法解决: 两边取对数(任意底均可): 即 令,那么就是找b数组的严格上升子序列的个数了。 那么就是个经典动态规划了 展开全文
头像 Kur1su
发表于 2020-04-24 09:35:45
Solution 简单分析一下题意, 有一个式子, 式子看起来很复杂, 但是简单的讲就是找的子序列化简一下得到 再化简一下得到 那么我们先对数组都处理一下然后问题就转化成求 上升子序列的个数令 是以 结尾的子序列个数那么有 于是 Code /* autor: Kurisu 2020年4 展开全文
头像 sunrise__sunrise
发表于 2020-04-24 00:50:51
讲到子序列,而且有大小关系,应该可以第一时间想到和动态规划有关系,带着这个思路,我们再看下题目。对于每个位置(i,j),都要存在 两边同时取对数,再相除得到 题目就变成了求以 为判断条件的递增子序列问题,问题规模比较小,可以直接二重循环遍历,也可以发现只和单个变量有关系,可以通过离散+树状数组取优化 展开全文
头像 shyyhs
发表于 2021-01-13 21:58:57
讲道理..这题我是思路秒代码秒的一题,很顺利...(为啥别人题解写了那么多啊 #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e2+5; const int mod=1e9+ 展开全文
头像 与人无语
发表于 2020-04-28 17:01:04
这是一道类似导弹拦截的dp题首先式子可化为 log(a[j])/j<log(a[i])/i然后用dp[i] 来表示以i位为结尾的子序列的个数 #include <bits/stdc++.h> #define ll long long int const N=110; int co 展开全文
头像 wxyww
发表于 2020-04-23 19:19:00
solution 我们大胆猜测:如果当前已经选择了一些位置,加入新位置时只要与已选的最后一个位置满足题目条件,那么肯定与前面的每个位置都满足条件。下面给出证明。 证明:设已有。对于第一个不等式,同时变为,因为底数为正数,所以不等式符号不变。即变为,对于第二个不等式,同时变为,即变为。然后将这两个新 展开全文
头像 Lskkkno1
发表于 2020-04-23 22:06:47
子序列 题目描述 给定一个序列,问有多少子序列满足 。 正解 这种子序列里面元素不独立的题一般不好做,考虑如何将元素的值独立。 现在 和 的值独立了,发现原问题就是求一个上升子序列个数。 用树状数组单点加,区间求和可以做到 。 注意到 并不是整数,但其实只要知道相对大小就行,即还需要离散化 展开全文
头像 |Crisp|
发表于 2020-04-30 18:04:56
题解: 首先,我们把问题拆分。假设这是一道不那么复杂,数据普通的子序列问题。 则对于一个数,结果中所有包含它的序列都是从前面的序列中继承过来的。那么到这个数为止,它能产生的新的序列就是1+它之前所有比较结果成立的序列数如果用 f[i] 来记录第i个数产生的新序列,那么转换方程就是1+sum{1,i 展开全文
头像 WuliWuliiii
发表于 2020-04-24 11:34:16
链接:https://ac.nowcoder.com/acm/problem/17065来源:牛客网 有N个权值,a[1]……a[N],现在要求一个子序列,满足对于所有的i<j,有 。 求解这样的子序列的个数。 那么,我假设dp[i]表示以第i位为结尾的符合要求的子序列的个数,那么 展开全文

等你来战

查看全部