02 2021 档案
摘要:Aimee 只要不能写成就肯定有 #include<iostream> #include<cstdio> #include<cmath> #define int long long using namespace std; int n,m; int prime[
阅读全文
摘要:[Aimee](https://www.luogu.com.cn/problem/P1474) 显然是个背包 #include<iostream> #include<cstdio> #define int long long using namespace std; int n,v; int f[1
阅读全文
摘要:Aimee 鉴于本人代码一开始写得非常不美观 所以说一堆特判 边界是且时不存在 然后一堆特殊情况 #include<iostream> #include<cstdio> #include<cstring> int a,b,k,z; using namespace std
阅读全文
摘要:Aimee 非常显然 #include<iostream> #include<cstring> using namespace std; int n; int h[1000001]; long long dp[1000001][2]; int main(){ cin>>n; memset(dp,0x
阅读全文
摘要:Aimee 一道非常水的分组背包求方案数 字典序这个东西要谨慎处理 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,m; int dp[20][2
阅读全文
摘要:AImee 反正是线性的,那么要不是早就到了j在那休息,要不就是上一天从上一座城市过来 #include<iostream> #include<cstdio> #include<cstring> using namespace std; int d[
阅读全文
摘要:Aimee 很显然的区间dp 字符和数字之间使用map大法进行转换即可 经典边界问题以及一点点暴力判断和优化 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<map> using n
阅读全文
摘要:Aimee 这么个线段树版子还要解释 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define int long long using namespace std; int n,m; int f
阅读全文
摘要:Aimee 很好想的是表示到第i个时公差为j,显然j不需要枚举,因为无论如何都会枚举i之前的电塔的,那样的话知道了电塔也就知道的公差了 转移的时候由于边界不太好考虑,那就先不考虑单元素了 所以从2开始枚举然后边枚举边统计,最后加上n #include<iostream> #incl
阅读全文
摘要:Aimee 最小费用是最大流基础上的 那么就用spfa代替Ek的bfs就行 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<queue> using namespace std; i
阅读全文
摘要:根据konig定理可知 最大匹配数=最大流=最小割=最小点集覆盖 那么这个题就是一个最大流问题了 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using names
阅读全文
摘要:加错边权了 最大流==最小割,毋庸置疑 但是这个题删的是点怎么办 那就把每一个点拆成两个,一入一出,然后中间连一条流量为1的边,图上原有的为inf 源点和汇点则大小也为inf 不能删啊 #include<iostream> #include<cstdio> #include<algorithm> #
阅读全文
摘要:Aimee 跳出来重新审视未注意的细节 就是输出整数aaa [斜率优化解释](https://www.luogu.com.cn/blog/hhz6830975/p3195-hnoi2008-wan-ju-zhuang-xiang-toy-xie-shuai-you-hua-ru-men-post)
阅读全文
摘要:Aimee 矩阵加速递推的模板了。 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #define int long long #define ll long long using names
阅读全文
摘要:矩阵乘法板子 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #define int long long #define ll long long using namespace std; const
阅读全文
摘要:Aimee 很水的题目 #include<iostream> using namespace std; int n; int mod=100003; int m; int x,y; int map[1001][1001]; long long dp[1001][1001]; int main(){
阅读全文
摘要:#include #include #include #include //#define int long long using namespace std; struct Matrix{ int rec[40][40]; } uni,a; struct Ma2{ Matrix rec[5][5]
阅读全文
摘要:这个问题怎么搞呢 显然是个递推式,可是有个 把它展开,就可以完全递推了。 关于递推式的一点点理解 首先把需要递推的东西列为一列,不妨记长度为L,另外一边可以搞一个对应的L*L的矩阵(先前矩阵其余部分用0填充) 其中每一行的每一个数也就对应的那一列中的元素的系数。 如此如此,这般这般。 矩阵
阅读全文
摘要:Aimee 首先的问题,如果这个题是无向图怎么搞,显然dp[i][j]表示到点i走了j步就可以了。 但是这是无向图啊,怎么搞呢 那就统计一下从那条边来的,也就是i表示从i边结束 然后暴力转移显然,但是tle起飞 显然可以用矩阵优化一下。 下标很重要,因为矩阵乘法的美妙性质。 最后的统计的时候正难则反
阅读全文
摘要:Aimee 把马路竖起来,横轴是时间 那么显然扫过的面积就是遮挡的水量 之后就是计算几何的事了 #include<iostream> #include<cstdio> #include<algorithm> #include<cstdio> #include<cstring> using names
阅读全文
摘要:Aimee 数据很小,直接爆搜 唯一麻烦的是检查是否重叠以及计算面积 但问题也不大 记得剪枝 #include<iostream> #include<cstdio> #include<algorithm> #include<cstdio> #include<cstring> using namesp
阅读全文
摘要:Aimee 非常简单 运用一点点的数学知识算出两两之间的距离 然后跑最短路 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using namespace std; i
阅读全文
摘要:Aimee 可以用网络流解决 建超级源点与超级汇点,源点与所有的外籍飞行员相连,容量为1(顶多选一人一次) 超级汇点同理,容量还是1,而飞行员之间的点就可以使大于等于1的任意数 顶多只有1的流量 最后所有漫流的边即为方案 方案书就是最大流 #include<iostream> #include<cs
阅读全文
摘要:Aimee 显然这是一个网络流 一开始,我们大可以随便找一条可行流 然后再找一条,可是如果要返回怎么办?可以建立对应的反向边,反向边的容量即即为正向边流量,构成残余网络,在残余网络上找到的从st的路径,就是一条可行流,并且,找到最大流的充要条件是它的对应残余网络没有增广路
阅读全文
摘要:Aimee 显然这是一个网络流 一开始,我们大可以随便找一条可行流 然后再找一条,可是如果要返回怎么办?可以建立对应的反向边,反向边的容量即即为正向边流量,构成残余网络,在残余网络上找到的从st的路径,就是一条可行流,并且,找到最大流的充要条件是它的对应残余网络没有增广路
阅读全文
摘要:Aimee 真不知道和dp有啥关系 两个关键值,区间和和区间最小值 那么直接左右扩展一个点能作为最小值的最大区间(反正是正整数) 然后算就行了 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; t
阅读全文
摘要:Aimee 马拉车算法,以优秀复杂度求解回文子串 我认为的关键:减少重复计算 用r表示当前已知回文子串右边界,id表示其中心的位置 显然我们当下求解的i应该再id右边 如果这个i在r的左边,那么显然在id的中心中,因该有一个关于i的对称点,并且因为位置的的原因,左边点的回文是已经被算出来了的,那样可
阅读全文
摘要:#include #include #include #include using namespace std; int c[5]; int n,m; int a[10001]; int x; int dp[41][41][41][41]; int find(int i,int j,int k,in
阅读全文
摘要:Aimee 想出状态转移的难度很小 很强的题解 #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> using namespace std; const int maxn=
阅读全文
摘要:Aimee 打着期望dp的名字推式子 这位大佬写的非常好 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using namespace std; int t; int
阅读全文
摘要:Aimee 很显然的状压dp 表示在i这个集合,最后停在了j时的最小长度 转移就行了 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int
阅读全文
摘要:Aimee 讨厌之处在于要求花费 花费可以视为上次花费+1 和次数相等 先考虑次数 那么期望呢 \(g_i=\frac{i}{n}*(g_i+f_i+1)+\f
阅读全文
摘要:Aimee' 这个题目还是很简单的 移个项就行了 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; in
阅读全文