模板
WA自云力机
这个作者很懒,什么都没留下…
展开
-
题解 [USACO10NOV]Buying Feed G
看完这到题,很容易想到用背包做,即设状态fi,jf_{i,j}fi,j表示前iii个商店一共带了jjj吨货的最小花费,只需要先把商店的位置排个序,就可以直接枚举了,那么就可以得到状态转移方程{fi,j=fi−1,j+j∗j∗(Xi−Xi−1),u=0fi,j=min0≤j≤k,1≤u≤Fi(fi,j−u+u∗Ci)\begin{cases} f_{i,j}=f_{i-1,j}+j*j*(X_i-X_{i-1}),u=0\\ f_{i,j}= \underset{0\le j\le k,1\le u\le原创 2020-12-13 20:38:58 · 132 阅读 · 0 评论 -
[CQOI2017]小Q的棋盘
看到这道题,很容易想到是一道树型DP,那么该如何做?首先我们可以先这样定义状态,fi,jf_{i,j}fi,j表示以iii为根节点,向下走jjj步最多能经过多少点,但很明显,只是这样是不行的,所以我们再加一维,第三维为0表示不会到根节点,第三维为1表示需要回到根节点,那么就可以得出状态转移方程{fi,j,0=max(fi,j−t,0+fv,t−2,1,fi,j−t,1+fv,t−1,0)fi,j,1=max(fi,j−t,1+fv,t−2,1)\begin{cases}f_{i,j,0}=max(f_原创 2020-12-07 22:02:12 · 123 阅读 · 0 评论 -
题解 UVA1630 串折叠 Folding
题目描述折叠的定义如下:一个字符串可以看成它自身的折叠。记作S = SX(S)是X(X>1)个S连接在一起的串的折叠。记作X(S) = SSSS…S(X个S)。如果A = A’, B = B’,则AB = A’B’ 例如,因为3(A) = AAA, 2(B) = BB,所以3(A)C2(B) = AAACBB,而2(3(A)C)2(B) = AAACAAACBB给一个字符串,求它的最短折叠。例如AAAAAAAAAABABABCCD的最短折叠为:9(A)3(AB)CCD。输入格式仅一行,即原创 2020-11-29 20:24:21 · 208 阅读 · 0 评论 -
平衡树 模板
例题P3369 【模板】普通平衡树概念: 平衡树是二叉搜索树和堆合并构成的数据结构,它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。性质:对于每一个节点,满足它大于左儿子里的每一个节点,小于右儿子的每一个节点,即树的中序遍历为有序序列对于一个平衡树,它可以支持的操作有1:插入一个值2:删除一个值3:查询一个 xxx 的排名4:查询排名为 xxx 的值5:查询严格小于 xxx 的最大值6:查询严格大于 xxx 的最小值时间复杂度:不论哪一种原创 2020-11-16 20:00:34 · 433 阅读 · 0 评论 -
高斯消元
例题P2455 [SDOI2006]线性方程组高斯消元做法首先声明一个变量存当前已经确定的方程组的数量1.枚举每一列2.找出每一列绝对值最大的一行3.将该行放到最上面4.将该行第一个系数变为13.将该列下面所有行的值变为0代码实现sq[i][j]sq[i][j]sq[i][j]存的为第i行第j个系数找出每一列绝对值最大的一行for (int i = r; i <= n;i++) if(fabs(sq[i][j])>fabs(sq[t][j])) t = i;原创 2020-08-28 07:59:30 · 108 阅读 · 0 评论 -
扩展欧几里得定理
裴蜀定理:对于任意x,y,若满足k1x+k2y=dk_1x+k_2y=dk1x+k2y=d有解,则d一定为k1,k2k_1,k_2k1,k2的最大公约数证明:∵d为x,yx,yx,y的最大公约数∴x,y一定为d的倍数∴k1x+k2yk_1x+k_2yk1x+k2y也一定为d的倍数,则一定存在k1,k2k_1,k_2k1,k2为方程的一组解通过欧几里得算法递归来求k1,k2k_1,k_2k1,k2核心为gcd(a,b)=gcd(b,a%b)若满足k1x+k2y=dk_1x+k原创 2020-08-27 15:51:20 · 153 阅读 · 0 评论 -
扩展中国剩余定理(EXCRT)
例题P4777 【模板】扩展中国剩余定理(EXCRT)对于每一个x≡b1(mod a1)x≡ b_1(\mod a_1)x≡b1(moda1),可以设k为x/a1x/a_1x/a1的商,易得an∗kn+bn=xa_n*k_n+b_n=xan∗kn+bn=x。对于前两个式子{a1∗k1+b1=xa2∗k2+b2=x\begin{cases}a_1*k_1+b_1=x \\a_2*k_2+b_2=x\end{cases}{a1∗k1+b1=xa2∗k2+b2=x可得原创 2020-08-26 21:59:54 · 241 阅读 · 1 评论 -
LCA(最近公共祖先)
例题给定一颗多叉树,求两个点的最近公共祖先dfs遍历预处理出每个节点的父亲信息,存在fa[x][0]中。fa[x][j]为x点向上走2^i步所到的节点depth[x]为x点所在的深度void dfs(int x,int f){ v[x] = 1; dpth[x] = dpth[f] + 1; fa[x][0] = f; for (int i = 1; i <= t;i++) fa[x][i] = fa[fa[x][i - 1]][i - 1]原创 2020-08-19 15:32:48 · 134 阅读 · 0 评论 -
K短路
次短路目前知道的方法有:1.跑一遍最短路,一次枚举删边 2.在跑最短路时同时记录最短路与次短路 3.起点和终点分别跑一次最短路,枚举边来替换最短路上的边例题P1491 集合位置#include<cstdio>#include<cmath>#include<queue>#include<cstring>using namespace std;typedef pair<double, int> PDI;const int INF =原创 2020-08-15 09:07:06 · 174 阅读 · 0 评论 -
图论(Dij,SPFA,Folyd,Prim,Kruskal算法)
图论 模板Dijstra算法#include<iostream>#include<cstring>using namespace std;int sq[505][505],dist[505],n,m,st[505];int dijstla(){ memset(dist, 0x3f, sizeof(dist)); dist[1] = 0; for (int i = 1; i <= n; i++) { int k = -1; for (int j =原创 2020-08-07 11:44:36 · 180 阅读 · 0 评论 -
模板 快速幂(递归)
普通(原理自行理解)int Fast_power(int a,int b)//a:底数,b:指数 { int s=1,base=a; while(b!=0) { if(b&1) s*=base; base*=base; b>>=1; } return s;}递归(同上)int pro(int a,int b)//同上{ if(b==1) return a; else { if(b%2==0) { int x=pro(a,b/原创 2020-08-07 11:42:36 · 90 阅读 · 0 评论 -
模板 快速排序/归并排序
快速排序(升序)void qsort(int l,int r,int a[]){ int l1=l,l2=r; int mid=a[(l+r)/2];//找到中间的数 do { while(a[l1]<mid) l1++;//找到不符合要求的数,退出 while(a[l2]>mid) l2--; if(l1<l2)//交换 { swap(a[l1],a[l2]); l1++;l2--; } }while(l1<l2); if(l1<原创 2020-08-07 11:41:51 · 209 阅读 · 0 评论