随笔分类 - 动态规划
摘要:简单记忆化搜索. 显然,数字的形态是类似阶梯下降的,状态数不会太多,记忆化爆搜就行. code: #include <bits/stdc++.h> #define N 12 #define mod 1000000007 #define base 12 #define ll long long #de
阅读全文
摘要:CF1305C 题解: 我们发现虽然 $n$ 很大,但是模数很小,所以相当于 $n$ 个数对 $m$ 取模后不能有重复数字. 那么其实这个 $n$ 最大也就是 $m$ ,直接 $O(m^2)$ 暴力算就行了. code: #include <bits/stdc++.h> #define ll lon
阅读全文
摘要:这种问题设最裸的状态就好了. 令 $f[i][j]$ 表示 $i \times j$ 矩阵的答案. 然后直接转移就行了. code: #include <bits/stdc++.h> #define N 3004 #define ll long long #define mod 1000000007
阅读全文
摘要:好神仙的一道字符串题! 由于后缀自动机+线段树合并的题做多了,看到复杂字符串的时候直接往 right 集合和后缀树那方面想了. 所以就没想出来 QAQ.... 这道题还是要从序列上来思考. 我们发现最优解一定可以表示成一个长度依次为 $1$ ~ $ans$ 字符串集合. 令 $dp[i]$ 表示以
阅读全文
摘要:朴素的高斯消元是 $O(n^3)$ 的,但是由于叶节点是终止节点,所以可以逐层向上推成 $k\times f(fa)+b$ 的形式. 推到根节点时直接取根节点的 $b$ 值就可以了. code: #include <cstdio> #include <cstring> #include <algor
阅读全文
摘要:维护 $dp[i]$ 表示长度为 $i$ 的 $LIS$ 的最小结尾长度. 然后每次我们新加入一个区间 $[l,r]$ ,这个可以用平衡树来维护:区间平移,区间+1,单点赋值. 调不出来QAQ.... code: #include <cstdio> #include <string> #includ
阅读全文
摘要:神题呀,我们观察到行走的方式一定是一条链+若干条环. 然后环可以看成是一对括号,所以来一个基于括号序的 DP. code: #include <bits/stdc++.h> #define ll long long #define N 3040 #define setIO(s) freopen(s"
阅读全文
摘要:按照挂件数量排序,然后做一个 DP 就好了. code: #include <bits/stdc++.h> #define ll long long #define N 2003 #define setIO(s) freopen(s".in","r",stdin) using namespace s
阅读全文
摘要:好神的一道计数题呀. code: #include <cstdio> #include <algorithm> #include <cstring> #define N 5000003 #define ll long long #define mod 998244353 #define setIO(
阅读全文
摘要:滚动数组推一下就行. code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) using namespace std; int dp[2][4][4][4][4],n; char s[100004]; int
阅读全文
摘要:这种多线程问题可以采用一维枚举,另一位用 dp 求解最优解来实现. 这道题和那个 ZJOI 的食堂排队的题挺像的. code: #include <bits/stdc++.h> #define ll long long #define inf 0x3f3f3f3f #define N 508000
阅读全文
摘要:code: #include <cstdio> #include <cstring> #include <algorithm> #define ll long long #define MAXN 160 #define MAXK 20 #define mod 12345678 #define set
阅读全文
摘要:有规律:$f[n]=3 \times f[n-1]-f[n-2]+2$. 由于没有模数,所以需要写一个高精度,这里直接套用的 FFT 板子. code: #include <cstdio> #include <cmath> #include <cstring> #include <algorithm
阅读全文
摘要:仔细观察样例解释,发现 $F(n)=2F(n-1)+[n \%2]$. 然后我们就可以推出来前 10 项左右的 $F(n)$ 的值,然后打表找规律发现 $F(n)=\frac{2^{n+1}}{3}$ (向下取整) 由于没有模数,所以需要手写一个 $FFT$ 维护高精度乘法的板子. code: #i
阅读全文
摘要:code: #include <cstdio> #include <cstring> #include <algorithm> #define M 185 #define N 10000008 #define ll long long #define setIO(s) freopen(s".in",
阅读全文
摘要:思路非常巧妙啊 code: #include <cstdio> #include <algorithm> #define ll long long #define N 5003 #define setIO(s) freopen(s".in","r",stdin) using namespace st
阅读全文
摘要:很不错的一道数数题. code: #include <cstdio> #include <algorithm> #define N 203 #define ll long long #define mod 1000000007 #define setIO(s) freopen(s".in","r",
阅读全文
摘要:套路:对于这种计算所有情况价值和的问题计算每一个点对答案的贡献. 我们发现,位置 $i$ 能对答案贡献 $val[i]$,当且仅当 $i$ 是前缀最大值,且 $i$ 不等于序列中最大元素. 我们不妨考虑哪些点大于等于 $val[i]$ 的位置,那么 $val[i]$ 能产生贡献的话显然要求 $i$
阅读全文
摘要:题意:给定一颗树,要求每个点的点权范围是 $[1,D]$ 且权值不大于父亲,求方案数. 显然,即使 $D$ 再大,$n$ 个点也最多只会取到 $n$ 个值. 令 $f[x][i]$ 表示以 $x$ 为根的子树中点 $x$ 取到权值 $i$ 的方案数. 令 $s[x][i]$ 表示 $f[x][i]$
阅读全文
摘要:朴素的DP:$f[i][j]$ 表示选了 $i$ 个数,异或值为 $j$ 的方案数. 转移:$f[i][j]=\sum_{i=1}^{m}f[i-1][k]\times isprime[p]$($p$ 异或 $k$ 等于 $j$) 如果 $n$ 比较小的话可以直接进行 FWT 优化 DP. 然而,这
阅读全文

浙公网安备 33010602011771号