bzoj 3622: 已经没有什么好害怕的了
2014-11-30 11:51
267 查看
Description
Input
Output
Sample Input
4 25 35 15 45
40 20 10 30
Sample Output
4HINT
学姐走好_(:з」∠)_
容斥+DP
f[i][j]表示前i个有j对大于药片。剩下i-j对情况随意的种数
f[i][j]=f[i-1][j]+f[i-1][j-1]*(next[i]-j+1
然后去除重复的
然后f'
[k]就是答案了
#include<cstdio> #include<algorithm> using namespace std; long long a[2001],b[2001]; long long next[2001]; long long f[2001][2001]; long long fx[2001][2001]; long long p[2001],px[2001]; long long mod=1000000009; inline long long fpow(long long x,long long y) { long long ans=1; while(y!=0) { if(y%2==1) ans=ans*x%mod; x=x*x%mod; y=y/2; } return ans; } inline void pow(long long x) { long long i; p[0]=1; for(i=1;i<=x;i++) { p[i]=p[i-1]*i%mod; px[i]=fpow(p[i],mod-2); } } int main() { int n,k; scanf("%d%d",&n,&k); if((n-k)%2==1) { printf("0\n"); return 0; } k=(n+k)/2; long long i,j; for(i=1;i<=n;i++) scanf("%lld",&a[i]); for(i=1;i<=n;i++) scanf("%lld",&b[i]); sort(a+1,a+1+n); sort(b+1,b+1+n); for(i=1;i<=n;i++) { for(j=next[i-1];j<=n;j++) { if(b[j]>a[i]) { next[i]=j-1; break; } } if(j==n+1) next[i]=n; } f[0][0]=1; for(i=1;i<=n;i++) { for(j=0;j<=i;j++) { f[i][j]=f[i-1][j]; if(j>0&&next[i]-j+1>0) f[i][j]=(f[i][j]+f[i-1][j-1]*(next[i]-j+1)%mod)%mod; } } pow(n); for(i=n;i>=k;i--) { fx [i]=f [i]*p[n-i]%mod; for(j=i+1;j<=n;j++) { fx [i]=fx [i]-((fx [j]*p[j]%mod)*px[j-i]%mod)*px[i]%mod; while(fx [i]<0) fx [i]+=mod; } } printf("%lld\n",fx [k]); return 0; }
相关文章推荐
- bzoj 3622: 已经没有什么好害怕的了 dp+容斥原理
- BZOJ 3622(已经没有什么好害怕的了-Dp+容斥原理)
- BZOJ3622: 已经没有什么好害怕的了 解题报告
- [BZOJ3622]已经没有什么好害怕的了(dp+容斥原理+组合数学)
- BZOJ 3622 已经没有什么好害怕的了
- [BZOJ3622]已经没有什么好害怕的了(容斥原理+DP)
- BZOJ 3622 已经没有什么好害怕的了 DP 容斥原理
- 【BZOJ3622】已经没有什么好害怕的了【计数DP】【姿势】
- [BZOJ 3622]已经没有什么好害怕的了
- BZOJ 3622: 已经没有什么好害怕的了 [容斥原理 DP]
- [BZOJ 3622]已经没有什么好害怕的了
- bzoj 3622 已经没有什么好害怕的了
- [bzoj3622]已经没有什么好害怕的了
- BZOJ3622 已经没有什么好害怕的了
- 【BZOJ3622】已经没有什么好害怕的了,DP+容斥原理
- BZOJ 3622 已经没有什么好害怕的了
- 【BZOJ3622】已经没有什么好害怕的了 容斥+DP
- 【BZOJ3622】已经没有什么好害怕的了
- BZOJ3622: 已经没有什么好害怕的了 DP
- 【BZOJ 3622】3622: 已经没有什么好害怕的了(DP+容斥原理)