摘要: 设f[i]为凑i元的方案数,这个随便dp一下就行了 然后处理限制,我们考虑用容斥,也就是4个超限 3个超限+2个超限 1个超限,这里用状压枚举一下,然后i硬币超限就当做选了d[i]+1个,在s里减去,最后用来容斥的就是f[s'] 阅读全文
posted @ 2018-09-14 15:46 lokiii 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 思路有点眼熟啊,就是设l1记录长为x的极长全1串贡献x的答案,l2记录长为x的极长全1串贡献x^2的答案,f记录真正的答案 转移的话根据n (n 1)=1,n^2 (n 1)^2=2n 1,n^3 (n 1)^3=3n^2 3n+1直接转移即可 cpp include include using n 阅读全文
posted @ 2018-09-14 15:11 lokiii 阅读(99) 评论(0) 推荐(0) 编辑
摘要: 今天脑子不太清醒,把数据范围看小了一直TTTTLE…… 最大费用最大流,每个格子拆成两个(x,y),(x,y)',(x,y)向(x,y)'连一条费用a[x][y]流量1的边表示选的一次,再连一条费用0流量inf的表示取走之后再从这里走,然后每个(x,y)'向(x,y+1),(x+1,y)连一条费用0 阅读全文
posted @ 2018-09-14 14:59 lokiii 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 对于三个点求最小路径长度和,答案肯定在某两个点的lca上,因为如果把集合点定在公共lca上,一定有两个点汇合后再一起上到lca,这样显然不如让剩下的那个点下来 这个lca可能是深度最深的……但是我懒得证了,反正只有三个lca,每个都求一遍然后取个max就好啦 cpp include include 阅读全文
posted @ 2018-09-14 14:08 lokiii 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 设sj,so,si分别是J O I的个数前缀和,然后要求求最长(l,r)满足sj[r] sj[l 1]==so[r] so[l 1]==si[r] si[l 1],化简一下就是满足so[r] so[l 1] (sj[r] sj[l 1) (si[r] si[l 1] (so[r] so[l 1))= 阅读全文
posted @ 2018-09-14 11:52 lokiii 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 很容易发现行数就是lcm环长,也就是要求和为n的若干数lcm的个数 有结论若p1^a1+p2^a2+...+pm^am include using namespace std; const int N=1005; int n,p[N],tot; long long f[N][N]; bool v[N 阅读全文
posted @ 2018-09-14 10:48 lokiii 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 我有病吧……明明直接枚举是否匹配就可以非要写hash,然后果然冲突了(……我个非酋居然还敢用hash 设f[s][i]为已选串状态为s并且最后一个串是i,还有预处理出g[i][j]表示最长有长为g[i][j]的i串后缀等于j串前缀这里,直接暴力匹配即可…… 然后注意到比较麻烦的事要求字典序最小,但是 阅读全文
posted @ 2018-09-14 09:56 lokiii 阅读(159) 评论(0) 推荐(0) 编辑