普通线性dp
Neo__Z
这个作者很懒,什么都没留下…
展开
-
NOIP2016 T4 组合数问题
解题报告如果你知道Cji=Cji−1+Cj−1i−1C_i^j=C_{i-1}^j+C_{i-1}^{j-1},那这道题就是菜题了。 时间复杂度O(n2)O(n^2)#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cmath> using name原创 2017-07-28 11:56:23 · 301 阅读 · 0 评论 -
bzoj1008 越狱【动态规划+快速幂】
解题思路:考虑用总方案数减去不会越狱的方案数。 设已有i个人且不会越狱的方案数为f[i]f[i],则再加一个人只需和第ii个不同即可,即是: f[i+1]=f[i]∗(m−1),且f[1]=mf[i+1]=f[i]*(m-1),且f[1]=m 快速幂即可。#include<cstdio> #define ll long long using namespace std;const int p=原创 2017-12-04 15:56:47 · 233 阅读 · 0 评论 -
bzoj4300 绝世好题【动态规划】
解题思路:注意只是bib_i&bi−1≠0b_{i-1}\ne 0,不是前缀与和为0。那么我们就可以按位dp,f[i]表示处理到当前数,第i位不为0的最优长度。转移就很轻松了,可以看代码。#include<bits/stdc++.h> #define ll long long using namespace std;int getint() { int i=0,f=1;char c;原创 2017-12-25 16:22:41 · 232 阅读 · 0 评论 -
Atcoder2292 Division into Two 【动态规划优化】
题目描述: 有一个包含N个不同整数的集合,其中第i小的元素是Si。我们希望把它划分成两个集合X和Y,使得: 集合X中任意两个相邻元素的差不小于A。 集合Y中任意两个相邻元素的差不小于B。 共有多少种不同的划分方式呢?输出答案对10^9+7取模后的结果。注意集合X或Y可以为空集。 1≤N≤10^5 解题思路: 先排序。 很好想到O(n2)O(n2)O(n^2)的dp,f[i][j]f...原创 2018-05-12 11:02:40 · 326 阅读 · 0 评论 -
loj#2331. 「清华集训 2017」某位歌姬的故事【动态规划】
传送门 解题思路: 将序列离散化后,可以给每个点确定一个取值的上界,那么每一种上届的贡献是独立的,分别求出再相乘即可。 对于一种上界 www,把对应的点和限制提出,那么对于每个右端点,唯一有用的限制就是左端点最靠右的,记为L[i]L[i]L[i],再设 f[i][j]f[i][j]f[i][j] 表示到第 iii 个点,最后一个 www 在 jjj 的方案数转移即可。 #include...原创 2018-05-31 15:38:40 · 1262 阅读 · 0 评论