容斥原理与计数问题
wanherun
今天会有好事发生吗
展开
-
bzoj1042 [HAOI2008]硬币购物
题目我们先考虑最最朴素的dp,像什么第几种硬币用了几枚的方法数,显然单次O(n^4)的吧,跑到宇宙毁灭的优秀算法233。如何优化呢?显然,如果硬币没有限制的话,就是一个十分简单的dp了f[0]=1;for(long long i=1;i<=4;i++) for(long long j=c[i];j<=N;j++) f[j]+=f[j-c[i]];之后加上了数量限制,怎么办呢原创 2017-09-11 21:48:22 · 217 阅读 · 0 评论 -
bzoj3505 [Cqoi2014]数三角形
题目先选3个点的总数减去三点共线的,横的,竖的,斜的,都一减就好了。#include<bits/stdc++.h>#define N 1000using namespace std;int gcd[N+1][N+1];int m,n;long long tmp,ans;int read(){ int x=0; char c=getchar(); while(c>原创 2017-09-08 22:31:06 · 161 阅读 · 0 评论 -
bzoj4517 [Sdoi2016]排列计数
题目先讲一讲全错排吧,就是1~n的排列中,A[i]!=i,共有几种方案。 即f[1]=0,f[2]=1,f[3]=2,f[4]=9,………,递推关系为f[i]=(i-1)(f[i-1]+f[i-2])。 至于证明吗,高中数学排列组合要讲,这就不严格证明了。再看这道题,A[i]==i是稳定的,那么,枚举这m个数,剩下的数全错排即可。答案为C(n,m)*f(n-m)。#include<bits/st原创 2017-09-07 14:21:57 · 229 阅读 · 0 评论 -
bzoj2160 拉拉队排练
题目回文串,当然想到manacher。俗称马拉车233。 先用manacher处理出长度为奇数的回文串有几个,再用快速幂来处理答案,算半道数学题吧233。#include<bits/stdc++.h>#define mod 19930726#define N 2000000#define LL long longusing namespace std;int pal[N+1];int原创 2017-08-31 07:40:29 · 209 阅读 · 0 评论 -
bzoj4403 序列统计
题目本人太菜,无法直接推公式,来来来,我们先写个暴力,简单吧。 之后,根据敏锐的观察力,发现了规律:ans=C(m+n,m)-1,m=r-l+1。 注意要用到Lucas,不然,嘿嘿嘿。。。#include<bits/stdc++.h>#define mod 1000003#define ll long longusing namespace std;ll n,m,r,l,T;ll fa原创 2017-08-30 07:42:33 · 277 阅读 · 0 评论