dp
Ripped
我那么浮躁却想要读懂你的生活
展开
-
【BZOJ 3930】【CQOI 2015】选数
听说标算是莫比乌斯反演?一脸懵逼 设f[i]为gcd等于k*i的方案数 从大到小处理,记L为a/(K*i),R为b/(K*i),那么一共就可以取出(R-L+1)个数,一共有(R-L+1)^n种方案。 有两种情况不合法: 1、这n个数全部相等,这样要减去(R-L+1)种情况; 2、比如做f[1]时取出2k和4k,这样他们的gcd是2k,所以还要再减去f[a*i] (a=1,2,3….)(有点原创 2017-03-19 18:12:17 · 399 阅读 · 0 评论 -
【BZOJ 4872】【2017六省联考】分手是祝愿
如果不考虑期望,只考虑最少次数: 从n开始考虑,n这盏灯只有n这个开关才能影响;当n这个开关确定之后,第n-1盏灯只有第n-1个开关才能影响……贪心一下就能知道最少次数了。 出题人良心啊给了这么多样例,还给了50分的k=n。 k=n是什么意思?显然开关的先后顺序是没有影响的,而且一个开关最多按一次(按两次等于没按),所以最多只要按n次,所以k=n直接输出最少方案就可以了。直接暴力枚举就能过,时原创 2017-04-27 14:14:48 · 1315 阅读 · 0 评论 -
【BZOJ 4870】【2017六省联考】组合数问题
其实我刚看到题目跟大部分人的反应是一样的,暴力Lucas定理。。。 后来发现没说模数一定是质数,那没事还是能骗好多分的。 然而事实上是那些暴力分根本用不到Lucas定理。。。 正解: 所求式子的意义:从nk个物品中取 模k余r 个物品的方案数。 显然有f[i+1][j]=f[i][j]+f[i][j−1]f[i+1][j]=f[i][j]+f[i][j-1],发现i是轮换的,所以这是一个一原创 2017-04-27 14:01:31 · 1041 阅读 · 0 评论 -
【BZOJ 4818】【SDOI 2017】序列计数
首先用一下容斥,变为所有方案减去没有质数的方案。 设f[i][j]f[i][j]表示前i个数和模p为j的方案数,显然答案就是f[n][0]f[n][0]。 递推式:f[i][j]=∑mk=1f[i−1][t]f[i][j]=\sum_{k=1}^{m}f[i-1][t],其中t=((j−k)%p+p)%pt=((j-k)\%p+p)\%p,也就是第i−1i-1位取的数。 显然这个nn太大了,考原创 2017-04-23 18:51:25 · 382 阅读 · 0 评论 -
【BZOJ 4887】【TJOI 2017】可乐
设f[i][j][1]表示第i秒停在j上没有爆炸的方案数,设f[i][j][0]表示第i秒停在j上的总方案数。 f[i][j][1]=f[i-1][j][1]+f[i-1][k][1] f[i][j][0]=f[i-1][j][0]+f[i-1][j][1]+f[i-1][k][1] 然后我们发现这是一个一阶递推,所以直接矩阵转一转就好了! PS:我可能对我那套矩阵理论有些。。不放心啊?我已原创 2017-05-05 07:51:53 · 911 阅读 · 0 评论 -
【BZOJ 4584】【APIO 2016】赛艇
首先离散化一下,然后令f[i][j][k]表示做到第i个学校,最后一个数落在j号区间,这个区间里有k个不同的数的方案数。(实际上如果两个学校的数量是一样的,那么对后面的方案是没有影响的,所以记录的是k个不一样的数)。 sum[t]=∑f[i-1][j][p] (1<=j<=t) f[i][j][k]=f[i-1][j][k]+f[i-1][j][k-1]*(len[j]-k+1)/k f[i]原创 2017-05-05 07:43:34 · 616 阅读 · 0 评论 -
【BZOJ 1408】【NOI 2002】Robot
题目相当于重新定义了一下φ\varphi和μ\mu,只不过和原定义有一些区别。 首先可以求出第一问和第二问,这等价于在所有奇质因子中取奇数个(偶数个)互不相同的奇质因子的方案数,直接dp即可,注意φ\varphi函数是积性函数,直接乘起来即可。 第三问实际上就是所有方案的数量减去前两种方案,同样也可以dp直接求解。但是注意由于φ\varphi不是完全积性函数,所以当一个质因子是次数是一次时乘上的原创 2017-05-05 07:39:41 · 499 阅读 · 0 评论 -
【BZOJ 4574】【ZJOI 2016】线段树
枚举每一个数,设f[k][i][j]表示k轮之后i到j区间内的数都小于等于枚举的那个数的方案数。注意这个[i,j]的范围是严格的,也就是说第i-1和j+1个数都是大于的。(换句话说,都是顶着上限的) 显然这个数所能影响的范围是从左边第一个大于它的数开始到右边第一个大于它的数结束。设这个最大的范围是[l,r]。 f[k][i][j]=f[k][i][j] = ∑i−1u=l(f[k−1][u][原创 2017-03-14 11:12:34 · 473 阅读 · 0 评论 -
【BZOJ 4557】【JLOI 2016】侦查守卫
鉴于省选杂题题意实在过于复杂QAQ之后就直接上题解了 这题如果想不出来正解的话。。估计只能拿10分,d=1的20分不知道能不能乱搞一发。。后面的几个点毫无区分度啊 令: f[i][j]表示i这个节点下面j层以下都被覆盖的代价 g[i][j]表示以i这个节点为根的子树、以及向上长度为j的一条链都被覆盖的代价 从下往上dp显然。这个g数组我一开始想到了,因为当前i这个点对上面的影响只有原创 2017-02-27 17:56:23 · 449 阅读 · 0 评论 -
【BZOJ 4513】【SDOI 2016】储能表
对每一位数字考虑,假设横坐标和纵坐标为x和y,对于每一位的(x,y)都有4种情况。 令f/g[i][a][b][c]表示第i位上: a=0:x#include<cmath> #include<cstdio> #include<vector> #include<cstring> #include<iomanip> #include<stdlib.h> #include<iostream> #inc原创 2017-02-27 18:07:44 · 470 阅读 · 0 评论 -
【BZOJ 4521】【CQOI 2016】手机号码
和山东省选的储能表很像,都是带上限的数位dp,先差分一下,然后询问两次即可。这里要注意10^10如果减1就变成10位数了,所以这里是加1。 用f[i][j][a][b][c][d][e]来表示。。。 做到第i位,上一位是j(第0位就用10表示),a表示最后两位是否一样,b表示是否已经出现连续三个数相等,c表示是否有4,d表示是否有8,e表示是否小于上限。#include<cmath> #incl原创 2017-03-06 15:17:55 · 328 阅读 · 0 评论 -
【BZOJ 4522】【CQOI 2016】密钥破解
其实这道题目的核心就是把N分解质因数。 引用一个很玄学的算法:pollard_rho算法。 http://blog.csdn.net/maxichu/article/details/45459533 代码如下。玄学之处有两个,一个是每次平方加上一个常数(这里是seed),第二个是每次达到上限k就重新开始,并且k的范围乘2。 分解完质因数就是解一个类似于ax+by=1的方程,套一下裴蜀和扩原创 2017-03-06 14:52:55 · 661 阅读 · 0 评论 -
【BZOJ 4873】【2017六省联考】寿司餐厅
对于m=0,相当于每个寿司的价格是独立的,那么设f[i][j]表示i到j这个区间寿司全部被取的最大美味度,显然f[i][j]可以从它的子区间得到。然后dp组合一下若干个区间就好了,60分感人。 正解是最大权闭合子图,把每个区间f[i][j]看作是一个节点A(i,j),把每个寿司看作是一个节点B(i),有如下约束条件: 1、取了A(i,j),一定要取A(i+1,j)和A(i,j-1); 2、取了原创 2017-04-27 14:28:12 · 1000 阅读 · 0 评论