codeforces 285E. Positions in Permutations (容斥原理+DP)
来源:互联网 发布:完美芦荟胶淘宝官网 编辑:程序博客网 时间:2024/05/01 07:17
题目描述
传送门
题目大意:一个1到n的排列p[i],一个位置是好位置当且仅当|p[i]-i|=1,求恰好有k个好位置的排列数。
题解
容斥:
代码
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#define N 1003#define p 1000000007 #define LL long long using namespace std;int n,k;LL jc[N],inv[N],f[N][N][3][3];LL calc(int n,int m){ return jc[n]*inv[m]%p*inv[n-m]%p;}LL quickpow(LL num,int x){ LL ans=1; LL base=num%p; while (x) { if (x&1) ans=ans*base%p; x>>=1; base=base*base%p; } return ans;}int main(){ //freopen("a.in","r",stdin); scanf("%d%d",&n,&k); jc[0]=1; for (int i=1;i<=n;i++) jc[i]=jc[i-1]*i%p; for (int i=0;i<=n;i++) inv[i]=quickpow(jc[i],p-2); f[1][0][1][0]=1;//f[i][j][0/1][0/1]表示该填第i位,已经填好了j位,i-1位是否填了,i位是否填了。 for (int i=1;i<=n;i++) for (int j=0;j<=n;j++) for (int a=0;a<=1;a++) for (int b=0;b<=1;b++) if (f[i][j][a][b]){ f[i+1][j][b][0]+=f[i][j][a][b]; f[i+1][j][b][0]%=p; f[i+1][j+1][b][1]+=f[i][j][a][b]; f[i+1][j+1][b][1]%=p; if (!a) f[i+1][j+1][b][0]+=f[i][j][a][b],f[i+1][j+1][b][0]%=p; } LL ans=0; for (int i=k;i<=n;i++) { int t=i-k; LL sum=f[n+1][i][1][0]+f[n+1][i][0][0]; sum%=p; //cout<<calc(i,k)<<" "<<jc[n-i]<<" "<<sum<<endl; if (t&1) ans=(ans-calc(i,k)*jc[n-i]%p*sum%p+p)%p; else ans=(ans+calc(i,k)*jc[n-i]%p*sum%p)%p; } printf("%I64d\n",(ans%p+p)%p);}
0 0
- codeforces 285E. Positions in Permutations (容斥原理+DP)
- Codeforces 285E Positions in Permutations (dp + 容斥)
- codeforces 285E Positions in Permutations(DP+容斥,hard)
- [Codeforces285E]Positions in Permutations(dp+容斥原理+组合数学)
- Codeforces 285E - Positions in Permutations 【题解待补全】
- Codeforces Round #175 DIV2 E Positions in Permutations
- Codeforces Round #175 (Div. 2) E Positions in Permutations
- Codeforces Round #198 (Div. 2) E. Iahub and Permutations —— 容斥原理
- Codeforces 140E New Year Garland (dp + 容斥)
- Codeforces 451E Devu and Flowers(容斥原理)
- codeforces 451E Devu and Flowers (容斥原理)
- Codeforces Round #258 (Div. 2)E(组合数+容斥原理)
- CodeForces 451E Devu and Flowers(容斥原理+组合数学+状态压缩)
- codeforces 585E. Present for Vitalik the Philatelist (容斥原理)
- codeforces 451E. Devu and Flowers (容斥原理+组合数学)
- Codeforces 439E 容斥
- Codeforces 340E Iahub and Permutations【思维+错排Dp】
- codeforces 415E E. Devu and Flowers(组合数学+容斥原理)
- 1040. 有几个PAT(25)----暴力
- Python之动态检测编码chardet
- 23.Merge k Sorted Lists
- AndroidStudio动态调试apk
- SSM/angularjs _ 文件的上传下载
- codeforces 285E. Positions in Permutations (容斥原理+DP)
- JProfiler之java剖析工具
- 在Android Studio中进行UI测试
- java中的阻塞线程
- 您的设计模式——建造者模式【Builder Pattern】
- C++建模实战1-高考录取系统(7)
- PHP中的正则表达式的优化
- LeetCode | 167. Two Sum II
- 设计模式随笔之适配器模式(Adapter)