摘要: https://www.luogu.com.cn/problem/P1040 n很小,可以树形dp或者区间dp。 设fij为从i到j的最大加分值,则有f[i][j]=max(f[i][k-1]*f[k+1][j]+f[k][k])。 有一个小技巧,将f[i][i-1]全部设置为1,这样的话搜索到叶子 阅读全文
posted @ 2020-06-09 22:11 Star_Cried 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 并查集有两种优化。第一种是直接连根——虽然是O(n)但是会破坏树形结构。 按秩合并 UVA11354(莫得原地址洛谷的凑合一下) 大意:求最小生成树的两个点间的最大路径。 带边权的并查集?多组数据? 我们按秩合并。 基本思想是使包含较少结点的树的根指向包含较多结点的树的根。 我们存边时,用结构体存边 阅读全文
posted @ 2020-06-09 21:35 Star_Cried 阅读(2464) 评论(2) 推荐(0) 编辑
摘要: https://www.luogu.com.cn/problem/P1880 一道区间dp题目。 用d[i][j]表示从i到j的最大/最小得分,那么依次枚举长度len,坐标i和j,三层循环就可以dp递推求得最值了(听说这是道NOI题目) 记得使用前缀和哦。 #include<iostream> #i 阅读全文
posted @ 2020-06-08 22:14 Star_Cried 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 贝祖定理:即如果a、b是整数,那么一定存在整数x、y使得ax+by=gcd(a,b)。换句话说,如果ax+by=m有解,那么m一定是gcd(a,b)的若干倍。(可以来判断一个这样的式子有没有解)有一个直接的应用就是 如果ax+by=1有解,那么gcd(a,b)=1; int gcd(int a,in 阅读全文
posted @ 2020-06-08 20:32 Star_Cried 阅读(370) 评论(0) 推荐(0) 编辑
摘要: 关闭流同步 std::ios::sync_with_stdio(false); 关闭输入输出流与标准输入输出(scanf printf)的同步,加快流速度,但关闭后不可混用。 整形快读 从标准输入流读入一个 int #include<cctype> #include<cstdio> inline i 阅读全文
posted @ 2020-06-07 11:43 Star_Cried 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 洛谷P2014选课 一道树形DP题。 f[i][j]表示i个点选j门课程的最大学分。 递推方程: for(int a=n;a>0;a--)//总共选择多少 for(int b=0;b<a;b++)//分别选择多少(b,a-b) f[x][a]=max(f[x][a],f[x][a-b]+f[u][b 阅读全文
posted @ 2020-06-03 11:47 Star_Cried 阅读(94) 评论(0) 推荐(0) 编辑
摘要: transform:<algorithm> tolower:<ctype.h> transform有两种使用方法 第一种(参数): 源目标起始迭代器地址 源目标结束迭代器地址 输出迭代器地址 自定义函数符(一元函数) 例如某一个题:(也就是我这里将两个函数相提并论的原因) 将字符串不分辨大小写进行比 阅读全文
posted @ 2020-06-03 11:22 Star_Cried 阅读(582) 评论(0) 推荐(0) 编辑
摘要: 2118: 墨墨的等式 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2390 Solved: 937[Submit][Status][Discuss] Description 墨墨突然对等式很感兴趣,他正在研究a1x1+a2x2+…+anxn=B存在 阅读全文
posted @ 2020-06-02 16:33 Star_Cried 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 二叉苹果树 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 using namespace std; 6 const int maxn=200; 7 struct edge{ 8 阅读全文
posted @ 2020-05-25 22:20 Star_Cried 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 原理 运用二分的方法进行查找,可以用于逆序对等题目。template出门右转百度。 用法 lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin 阅读全文
posted @ 2020-05-21 11:15 Star_Cried 阅读(163) 评论(0) 推荐(0) 编辑