自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 bzoj1015 [JSOI2008]星球大战 并查集

对于这种连续删边的问题,可以离线,这样就变成了加边,usaco有类似的题。。码:#include#include#includeusing namespace std;#define N 400005int fu[N],c[N],i,n,j,k,m,a,b,f1,f2,ans,daan[N];bool cx[N],xx[N];vectorv[N];int find(

2017-12-30 14:53:43 185

原创 bzoj1967 [AHOI2005]穿越磁场 离散最短路

这个题难点在于离散的角度,一开始想的是对联通块离散,但由于联通块形态不一,所以只能dfs,效率为4e8所以我们可以离散  直线间的间距,这样也就相当于离散了dfs的过程所以线段的题有一个套路就是离散间距、、注:分清>号和>=号码:#include#include#include#include#include#includeusing names

2017-12-29 19:56:22 254

原创 bzoj2822 [AHOI2012]树屋阶梯 dp

容易得到一个结论:每一个块必须卡住一个角,不然一定是无法覆盖全的(一个矩形只能覆盖一个角)所以就枚举多出来的矩形覆盖哪个角,剩下的方案数用以前算过的,类似插数dp码:#include#include#includeusing namespace std;int n,f[555][999],i,j,k,l,lin2[999],o,jw;int main(){ sca

2017-12-29 16:41:19 293

原创 bzoj3214 [Zjoi2013]丽洁体 dp

把单词全hash出来,比ac自动机匹配方便多了。。首先A和C直接贪心就可以了然后可以可以根据特殊数据:每个词出现次数上限500;每个相同的词可以对应不一样的位置,所以只需要记录在哪些位置出现过,复杂度上限是n*500中间的匹配就用dp,由上一个转移来,注意开始词f是0,结束词f要取最小值(方便统计答案)码(linux要len-1):#include#include

2017-12-28 21:38:50 231

原创 bzoj1965 [AHOI2005]洗牌 结论

这种循环操作的题首先想到有向图模型,然后发现有循环节,然后发现偶数个是/2,奇数个是+一列循环的数然后每个数正好出现一次,想到快速幂,然后就找到模数了(打表找规律)数据比较水,还以为要写高精码:#include#includeusing namespace std;#define ll long longll n,m,k;ll ksm(ll a,ll b,

2017-12-28 19:25:35 269

原创 bzoj1966 [AHOI2005]病毒检测 结论+暴力

这个题注意到*为一串合法的病毒串提供了空间,所以对于一串字符串,病毒串的依据是多种的这时候就需要确定一种构造方法,根据选择空间的变化,显然靠左的要先选然后就是匹配带?的串,KMP没法匹配,所以只能暴力(其实n^3不应该是正解)非常难调,没有优美的写法码:#include#include#includechar str[1005],ch[555];int

2017-12-28 15:34:59 359

原创 [AHOI2004]实验基地 dp+枚举

枚举矩形,然后利用枚举的顺序顺便求区间最小连续子段和码:#include#includeusing namespace std;long long n,i,j,k,a[3][2005],sum[2005], o,ans,daan=-999999999999;int main(){ scanf("%lld",&n); for(i=1;i<=2;i++) for(j=1

2017-12-27 15:08:48 203

原创 [AHOI2004]数字迷阵 结论+矩乘

毒瘤题,题目描述十分不可做,根据题目描述去切入是基本不可能做出来的但他表都打出来了,所以可以试着找规律所有后面的数字知道第一项后都是可以logj求出来的所以观察第一列的规律,他们不是差2就是差3,然后就纯粹凭找规律能力了,,它们的差值排列完后是3 2 3 3 2 3 2 3 3 2 3 3 2 3 2 3 3 2 3规律就是,分类看数字:32 33   2 32

2017-12-26 20:15:18 382

原创 bzoj1034 [ZJOI2008]泡泡堂BNB 结论

首先,根据田忌赛马的策略,当第一队的第一个比第二队的第一个小 时,用最小的换最大的类似的推出,当第一队的第一个比第二队的第一个大 时,用最大的换最大的同时,从反方向考虑,当第一队的最小的比第二队的最小的大 时,用最小的换最小的然后就是头尾都相等的情况,有两个策略:左图:拿1分 ,  后面的配对情况不变,   右图,不拿1分,后面的错一位的最差情况(=相等,虚线小于,实线大于

2017-12-26 15:50:39 173

原创 [noip2017]列队 splay

noip出这个题简直丧心病狂,省选都没考过这么恶心的splay这个题思路不是很难找,要点只有两个:特殊数据和动态结构首先纵向发生变化的一定是最右边的一列,所以它是特殊的然后询问只有1e5 ,而矩阵是1e5*1e5的,所以询问少,是特殊的所有的操作等价于从一行中选择一个,插入到最后一列的队尾,从最后一列中选择一个,插入到一列的队尾一开始想用离线线段树做,存sz,合并不会被询问的点

2017-12-25 21:30:39 405

原创 bzoj2299 [HAOI2011]向量 结论 裴蜀定理

这个题首先需要用分类的思想首先+-a,+-b 和  +-b,+-a是两类然后由于操作的数比较固定,所以不考虑值,只考虑操作次数然后发现对于同一类的同一个坐标,两个相反的操作可以消除所以两个坐标的净操作差值应该是2的倍数然后根据裴蜀定理,   nx+my==gcd(x,y)一定有解所以对于不同类的同一个坐标,他一定是gcd(x,y)的倍数,为了保证同一类的不同坐标差值是2

2017-12-24 08:53:09 293

原创 bzoj2424 [HAOI2010]订货 费用流

比较直观的费用流模型码:#include#include#include#includeusing namespace std;#define inf 1e9queueq;int s,t,tot=-1,qj[202],S,xia[202],hou[2002],zhong[2002],i,j,x,n,m;long long ans,v[2002],co[2002],d

2017-12-23 19:24:01 147

原创 bzoj2425 [HAOI2010]计数 组合数

分部分统计即可,注意0的位置用插板法使用组合数要区别第一个位置前能不能放码:#include#include#includeusing namespace std;long long i,j,len,C[59][59],tong[11],lin,fa,ans,tot,k;char str[99];int main(){ scanf("%s",str); le

2017-12-23 17:07:24 162

原创 bzoj2426 [HAOI2010]工厂选址 读题+贪心

这个提题目描述比较模糊,读错了两遍题首先旧工厂必须正好是b吨然后c是每吨的价钱然后就顺着特殊条件就很好做了工厂地址之间互不影响,直接枚举首先有一个工厂是固定的,而且每一吨煤不是旧就是新所以决策就相当于 选择一个,同时也决定了另一个所以贪心找c【0】-c【i】最小的就可以了(即损失最大)码:#include#include#includeusing

2017-12-23 10:38:47 208

原创 [HAOI2009]毛毛虫 dfs

很多题都是这个套路,第一遍树形dp,第二遍邻位容斥转移注意讨论清楚转移方式码:#include#include#includeusing namespace std;#define N 400005vectorv[N];int f1[N],f2[N],a,b,ans,n,m,i;void dfs(int o,int fa){ int i; f1[o]=1; f2[

2017-12-23 08:34:18 283

原创 bzoj1047 [HAOI2007]理想的正方形 单调队列

这种在矩形里面找矩形有固定的套路,不是容斥就是左右上下延伸,这个题就是向左向右延伸、、然后手玩优化发现邻位转移比暴力要好一些,可以用splay统计,但复杂度不对然后由于每一行互不影响于是可以单行同步操作然后统计的时候就枚举列操作一遍于是有限制最大值和最小值就转化为单调队列所以这个题就是二维单调队列了码:#include#includeusing namesp

2017-12-22 19:28:20 220

原创 bzoj1860 [Zjoi2006]麻将 结论+插数dp

这个题模型+手玩+特殊情况  可以比较简单的推出首先考虑特殊情况 即这个单独的两个,这是可以枚举的然后考虑模型,根据插数dp的思考方式,插入一个数会造成的影响只与相邻两个位置有关,所以就可以找到状态但是f[100][100][100]的状态在扫的时候会炸,所以就考虑优化手玩一下,发现同一副牌可以有多种胡的方式,此时就考虑怎么往一个方向上靠,然后发现3个3张和3个顺是一样的

2017-12-22 15:46:25 255

原创 [ZJOI2005]沼泽鳄鱼 矩乘dp

如果没有食人鱼(鳄鱼),就是普通矩乘如果有了食人鱼,就要考虑多一点角度1:特殊值入手注意到食人鱼的周期不会超过4次,它是很小的,而且隐藏了周期性这个周期性已经提示了要利用周期性dp、所以就考虑把所以就利用12转移就可以了然后要注意:当转移不规律的时候,矩乘不满足交换律,所以小于12的部分要放到最后乘(因为矩乘是按照顺序转移的)码:

2017-12-20 18:37:30 247

原创 [ZJOI2005]午餐 贪心+dp

这个题如果直接dp的话要考虑先从题目类型入手,这种规划性问题 应该是个dp1开始的时间、1结束的时间、2开始的时间、2结束的时间这是200^6级别的状态数,且没有任何状态优化的余地所以就要考虑使用特殊方法结合性质优化然后手玩,发现打饭时间长的一定是在前面所以可以排个序,然后利用 前面的人 非1即2的原理优化所以1开始的时间设进状态,这样2开始的时间也就可以补出来,然后就

2017-12-19 21:55:58 197

原创 bzoj1041 [HAOI2008]圆上的整点 gcd

这个题非常恶心,因为条件很少,要求也很少,看起来没有任何特殊的性质所以只能往约数、gcd上靠然后就是 x^2=r^2-y^2=(r-y)(r+y)设A=r-y, B=r+y 由于A*B是完全平方数, 设d=gcd(A,B)则 gcd(A/d,B/d)=1设A=u*d B=v*d所以u=(r-y)/d , v=(r+y)/d则v+u=2r/d  则u和v都是完

2017-12-19 19:16:07 137

原创 [SHOI2012]魔法树 链剖

都是链剖基础操作,注意开long long码:#include#include#includeusing namespace std;#define zuo o<<1,l,mid#define you o<<1|1,mid+1,rint x,y,a,b,i,n,q,cnt,fu[100005],sz[100005],d[100005<<2],hson[100005],t

2017-12-18 20:57:41 143

原创 bzoj2751 [HAOI2012]容易题 数学

基本的数学原理,但似乎并没有这方面的直觉这种计算方式是每一项乘每一项+起来相当于  a*d+a*e+a*f+b*d+b*e+b*f+c*d+c*e+c*f           =(a+b+c)*(d+e+f)所以就相当于每个位置可以取的数字之和,再连续乘码:#include#include#include#includeusing namespace std

2017-12-18 16:43:18 166

原创 bzoj1211 [HNOI2004]树的计数 prufer序列+组合数

如果独自去想出prufer序列实在太难了所以就只能直接用结论,把树转成prufer序列后这棵树和prufer序列是一一对应的关系树->prufer序列:每次找到所有叶子结点中编号最小的,删掉,然后把他的父亲加入序列prufer序列->树:新建一棵树,当前还没有节点,从前往后,找到当前序列中没有,新建的树上也没有的数中最小的,和序列头连边,然后头指针++,    所以就变成了数字分配

2017-12-18 14:50:33 187

原创 bzoj1237 [SCOI2008]配对 贪心结论+插数dp

如果没有相同的数不能配的情况下,就直接排序后对位配就可以了,由单调性很好证明然后如果有相同不能配的情况,那配对的数字在排完序的数列里一定不会跨度太大,因为离得越远意味着差值越大然后就需要定量考虑到底要跨多少只有相同的才会产生跨度,如果相同的有连续2个 就是交叉相连,如果3个,就有两种情况 ,如果4个,显然两个X更优以后的就用X逼近,剩下3个就连成キ的两种情况就可以了码:

2017-12-17 17:19:08 231

原创 bzoj1225 [HNOI2001] 求正整数 约数个数定理+对数

一看到约数个数就可以很快想到约数个数定理然后就是反推,枚举约数 注意需要高精,但搜索过程高精会T,所以利用对数运算对乘和次方降级如 2^3*3*5  →    log(2^3*3*5) = 3*log(2)+log(3)+log(5)码:#include#include#includeusing namespace std;int n,i,j,cnt,lin[1

2017-12-17 14:58:15 306

原创 bzoj1031 [JSOI2007]字符加密 后缀数组改

DA后缀数组构造的思想主要的就是倍增即类似RMQ的双关键字排序所以就可以用双关键字排序的方法来构造后缀数组基数排序和快排都可以,鉴于是1e5,直接nlogn就够了码:#include#include#include#includeusing namespace std;#define N 500005int rk[N],len,n,i,k,cnt;char

2017-12-14 16:19:05 127

原创 bzoj1974 [Sdoi2010]代码拍卖会 循环+背包

一般这种计数题就两个套路:找到倍数然后删除不合法的   找到合法的然后删除不是倍数的如果先找倍数,那不合法的数位置和倍数没有直接关系这个题是要先找合法的 然后删除不是倍数的首先这个合法的数找的方法最传统的是数位dp,但显然不行,如果考虑对数位dp进行优化的话,也无非是矩乘之类的过程优化所以必须考虑转移优化,剪枝就是只循环比上一位大的,然后套用前缀和但这样的剪枝也是没用的,由于n

2017-12-13 17:24:45 385

原创 bzoj1996 [Hnoi2010]chorus 合唱队 区间dp

题目隐藏了一个性质,就是新加入的不是在区间最左边,就是在最右边所以就直接根据最左边和最右边的大小关系转移就可以了#include#includeusing namespace std;#define P 19650827 long long f[1005][1005][2],ans;int a[1005],n,i,j;int main(){ scanf("%d",&n);

2017-12-11 15:16:28 197

原创 【ZJOI2010】数字计数 数位dp

比较直接的数位dp,但不是很好写注:1、每一位作为最高位的时候要统计2、每一位一个周期的个数要统计3、每一位作为不确定的最高位的个数要统计4、统计分两部分:当前位和以后位码:#include#includeusing namespace std;long long cnt,a,b,ans,daan[11],now,i,lina,linb,j

2017-12-06 19:16:21 257

原创 bzoj1037 [ZJOI2008]生日聚会Party 插数dp

这个题首先要认清楚任意一个区间差不超过k个怎么理解看到k一般想的是装压,但如果是状压的思路的话,就需要前k个满足某种条件,于是有可能会猜到前k个满足非全0或1,但这是显然错误的由于仅仅考虑前k个并不能概括全体,而加状态也肯定是错的,就可以考虑离散前几个设插数的位置为末尾,则只会对后缀产生影响,由于不符合条件可能有多个,就只用取最长的作为代表,这样就可以记录它对每个代表后缀的长度  

2017-12-05 17:41:20 125

原创 bzoj1304 [CQOI2009]叶子的染色 dfs+树形dp

这个类型的题应该是做过很多次,但做起来还是比较慢这个题常规方法是枚举根,但这样是n^2的,这样就考虑优化可以作为根的点一定构成一棵树,所以每次找相邻的点一定可以考虑所有情况然后就是如何用父节点的最优值更新子节点的最优值首先对于一个根节点,当它的选择确定了之后,所有子树就是独立的所以只用枚举选择(选择只缺0还是1)然后转移到子节点就直接把这棵子树对父节点的贡献减掉就可以了

2017-12-04 21:40:00 281

原创 bzoj1084 [SCOI2005]最大子矩阵 dp

首先题目是要选几个连续的矩阵,有关连续类的问题是可以最优值直接在相邻两行转移的而且题目中m注: 0 0也要转移码:#include#include#includeusing namespace std;#define N 205int n,m,k,a[N][3],f[N][15][15],i,j,l,ans=-1000000009;int main(){ s

2017-12-04 15:19:25 157

原创 bzoj1875 [SDOI2009]HH去散步 偏移+化边+矩乘

这个题一看便知是矩乘,但是有限制条件:不能往回走其实正常的想法应该是记录来向然后容斥,但在减答案的时候是子问题递归的,所以容斥不行然后可以记录路径终点的前继和起点的后继,但复杂度不科学由于点与点之间子问题不是孤立的,所以类似区间dp的方法优化是不行的这时要考虑限制每一次第一个连出,而且题目要求的是边不能回,不是点不能回,点不能回和便不能回的区别是:点有可能连多条边,边只会连

2017-12-03 20:44:42 177

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除