题目:https://www.luogu.org/problemnew/show/P2943 一下想到n^2.然后不会了. 看过TJ之后似乎有了新的认识. n^2的冗余部分在于当后面那部分的种类数一样时,只需用最前面的dp转移过来即可. 所以如果枚举的是后面那部分的种类数,对于每个种类数记录一下最前面的dp,也许会好一些. 但是种类也有n种,怎么办? 考虑是否需要枚举全部从1~n. k*k是一个比较大的数.发现一定有一种情况使得时间花费为n(即全部单个选),所以只需要枚举k*k<=n的种类数即可…
非常巧妙的动态规划. 你会发现每一个区间地颜色种类不能超过 $\sqrt n$, 所以可以直接枚举区间颜色种类. 令这个为 $pos[j],$ 然后考虑如何去更新这个东西就行了. Code: #include <bits/stdc++.h> #define N 40004 #define setIO(s) freopen(s".in","r",stdin) using namespace std; int p[N],lst[N],nex[N],pos[N…
洛谷 P4284 [SHOI2014]概率充电器 概率与期望+换根DP 题目描述 著名的电子产品品牌\(SHOI\) 刚刚发布了引领世界潮流的下一代电子产品-- 概率充电器: "采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决 定!\(SHOI\) 概率充电器,您生活不可或缺的必需品!能充上电吗?现在就试试看 吧!" \(SHOI\) 概率充电器由\(n-1\) 条导线连通了\(n\) 个充电元件.进行充电时,每条导 线是否可以导电以概率决定,每一个充电元件自身是否直接进…
P2947 [USACO09MAR]仰望Look Up 74通过 122提交 题目提供者洛谷OnlineJudge 标签USACO2009云端 难度普及/提高- 时空限制1s / 128MB 提交  讨论  题解 最新讨论更多讨论 中文翻译应当为向右看齐 题目中文版范围.. 题目描述 Farmer John's N (1 <= N <= 100,000) cows, conveniently numbered 1..N, are once again standing in a row. Co…
洛谷题目传送门 神仙思维题还是要写点东西才好. 树 每次操作把相邻且同色的点反色,直接这样思考会发现状态有很强的后效性,没办法考虑转移. 因为树是二分图,所以我们转化模型:在树的奇数层的所有点上都有一枚棋子,每次可以将棋子移向相邻的空位,目标状态是树的偶数层的所有点上都有棋子. 这样的互换总次数有没有一个下界呢? 我们求出\(a_i\)表示点\(i\)子树中棋子数量与空位数量之差(可以是负数),那么\(i\)的父边就至少要交换\(|a_i|\)次. 为什么呢?子树里面空位比棋子少的话,肯定要通过…
题目链接: 洛谷 BZOJ 题目大意:有两个长为 $n$ 的序列 $a,b$,问有多少种重排 $b$ 的方式,使得满足 $a_i>b_i$ 的 $i$ 的个数比满足 $a_i<b_i$ 的 $i$ 的个数恰好多 $k$ 个.答案对 $10^9+9$ 取模. $1\le n\le 2000,0\le k\le n$.保证 $a,b$ 中没有相同的数. 首先根据小学数学知识可知,$a_i>b_i$ 的个数应该是 $\frac{n+k}{2}$.如果 $n+k$ 不是偶数那么就无解. 那么就可…
题目链接 洛谷P4608 题解 建个序列自动机后 第一问暴搜 第二问dp + 高精 设\(f[i][j]\)为两个序列自动机分别走到\(i\)和\(j\)节点的方案数,答案就是\(f[0][0]\) 由于空间卡的很紧,高精不仅要压位,还要动态开内存 由于有些状态是没用的,记忆化搜索以减少内存损失 #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include…
洛谷P3166:https://www.luogu.org/problemnew/show/P3166 思路 用组合数求出所有的3个点组合(包含不合法的) 把横竖的3个点共线的去掉 把斜的3个点共线的去掉(枚举所有的矩阵把每个矩阵的对角线去掉) 每一条对角线可以取得首尾两点有(n-i)*(m-j)*2种方式可以选择 每一条对角线除了首尾两个点之外可以取到中间点有gcd(i,j)-1个 因此有对于每个条对角线有gcd(i,j)-1种要去掉(相似三角形) 代码 #include<iostream>…
题目: 洛谷3648 注:这道题洛谷3648有SPJ,要求输出方案.BZOJ3675数据组数较多但不要求输出方案. 分析: 这可能是我第三次重学斜率优化了--好菜啊 这道题首先一看就是个DP.稍微推一推类似下面这种式子就会发现事实上结果和切的顺序无关 \[a(b+c)+bc=ab+c(a+b)=ab+ac+bc\] 那么就可以用\(f[i][j]\)表示切了\(j\)次,最右一次在\(i\)后面切的最大值.用\(sum[i]\)表示原序列前\(i\)个数之和,那么就有了这个DP方程(假设在\(i…
洛谷P1879 [USACO06NOV]玉米田Corn Fields \(f[i][j]\) 表示前 \(i\) 行且第 \(i\) 行状态为 \(j\) 的方案总数.\(j\) 的大小为 \(0 \to (1 >> n - 1)\) . 第 \(i\) 行,种植状态为 \(j\) 的方案总数等于所有合法的 \(f[i-1][k]\) 之和. 状态 \(j\) 满足同一行内没有相邻的两块草地(没有共同边). 状态 \(j\) 和 \(k\) 满足相邻两行的种植情况没有两块草地有共同边. \[…