/* dp维护整体的概率, 每次相当于回退一格然后重新dp一格 */ #include<cstdio> #include<algorithm> #include<iostream> #include<cstring> #include<queue> #define ll long long #define M 202 #define mmp make_pair using namespace std; int read() { int nm =…
O(n4)O(n^4)O(n4)的DP很好想,但是过不了.来看看O(n3)O(n^3)O(n3)的把. Freopen的博客 CODE #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MAXN = 205; const int mod = 1e9 + 7; int n, tot, m[MAXN], v[MAXN], a[MAXN][MAXN]…
题意 题目链接 Sol 直接拿set维护\(li\)连续段.因为set内的区间互不相交,而且每个线段会被至多加入删除一次,所以复杂度是对的. #include<bits/stdc++.h> #define Pair pair<int, int> #define MP make_pair #define fi first #define se second using namespace std; const int MAXN = 1e6 + 10, INF = 2147483646…
题意 题目链接 Sol 这题是来搞笑的吧.. 考虑一个数的贡献是\(O(\frac{N}{i})\) 直接数论分块. #include<bits/stdc++.h> #define Pair pair<int, int> #define MP(x, y) make_pair(x, y) #define fi first #define se second #define int long long #define LL long long #define ull unsigned…
洛谷 P6622 [省选联考 2020 A/B 卷] 信号传递 题解 某次模拟赛的T2,考场上懒得想正解 (其实是不会QAQ), 打了个暴力就骗了\(30pts\) 就火速溜了,参考了一下某位强者的题解 大概懂了一点思路,有亿点毒瘤... 数据范围是\(m<=23\) 的 明显是个状压么!!! 数组代表意义 令\(f[i]\)表示,当已经确定的信号站集合为\(i\)时,此时已确定花费的最小值是多少. 此时考虑两个转移: 将左向右方向中继变换为先由初始节点中继到\(0\)号节点,再由\(0\)号节…
题意 [省选联考 2020 A 卷] 组合数问题 想法 自己在多项式和数论方面还是太差了,最近写这些题都没多少思路,看完题解才会 首先有这两个柿子 \(k*\dbinom{n}{k} = n*\dbinom{n - 1}{k - 1}\) \((1 + x) ^ n = \sum_{i = 0}^{n}\dbinom{n}{i}x^i\) 然后对于题目中所要求的多项式\(f(x)\)我们自然把他拆开,对于一个单个\(k\)对答案贡献 \(\sum_{i = 1}^{m}a_i * (k^i *…
很巧妙的一个构造. 我是没有想到的. 自己的思维能力可能还是不足. 考虑先满足\(b\)对\(a\)的限制,把\(a\)的第一行和第一列设\(0\),推出这个\(a\). 接下来考虑对这个\(a\),矩阵进行一些行列加的操作满足\(\leq 1e6\)的性质. 考虑操作做时,奇偶分开加减这样的操作保证\(b\)的限制. 借用一下其他大佬的图. 如下代码因为被卡常了,所以在跑\(BellmanFord\)时没有跑完,所以其实并不保证正确性.只是能过数据而已,好无奈. [省选联考 2021 A 卷]…
垃圾福建垫底选手来看看这题. 大家怎么都写带 \(log\) 的. 我来说一个线性做法好了. 那么我们考虑枚举 \(k\) 作为翻转完的最小值. 那么构造出一个满足条件的操作,我们在 \(a_i\) 中查询一个最大的位置使 \(a_i < k\) ,那么 \(a_1\) 到 \(a_i\) 都要进行翻转,且 \(b_1 到 b_i > k\),那么这样做的次数是 \(i\) 或者 \(i - 1\)(考虑\(k\)是\(b\)且对应的\(a\)在需要翻转的区间里)的. 那么考虑对这个 \(k\…
luoguP6622 [省选联考 2020 A/B 卷] 信号传递(状压dp) Luogu 题外话: 我可能是傻逼, 但不管我是不是傻逼, 我永远单挑出题人. 题解时间 看数据范围可以确定状压dp. $ dp[s] $ 表示s集合去代替前几个数的话现有部分的最小结果. 将数组转化成数字之间的带权图,预处理集合和点之间的单向边数量就能解决. 对于一对相邻的转化完之后数 $ a,b $ ,贡献为 \[-a+b(a<b)\\ ka+kb(a>b) \] 由此状压dp得出解. 时间复杂度实际上比 $…
luoguP6623 [省选联考 2020 A 卷] 树(trie树) Luogu 题外话: ...想不出来啥好说的了. 我认识的人基本都切这道题了. 就我只会10分暴力. 我是傻逼. 题解时间 先不想用什么维护,拆分成如下操作: 插入,合并,全局异或和,全局加一. 全局加一咋做? Trie树变成从低位到高位记录就好. 全局加一就是直接反转,看到进位(这一位存在1方向节点变成0方向节点)就递归下去继续反转. 然后就没了. #include<bits/stdc++.h> using namesp…