NOIP2016组合数问题
来源:互联网 发布:外国人在中国翻译软件 编辑:程序博客网 时间:2024/05/29 06:54
组合数问题
【题目分析】
dp不解释。首先要来一个组合数将Cnm的值都预处理出来,不过在加起来的时候记得取模。
接下来就是二维前缀和的事情了。
【代码】
#define M 2000#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;int c[M+3][M+3],sum[M+3][M+3];int k,Cas,n,m;void Rd(int &res){ char c; res=0; while(c=getchar(),!isdigit(c)); do{ res=(res<<3)+(res<<1)+(c^48); }while(c=getchar(),isdigit(c));}void Ps(int x){ if(!x)return; Ps(x/10); putchar(x%10^48);}void Pf(int x){ if(!x)putchar('0'); if(x<0)putchar('-'),x=-x; Ps(x); putchar('\n');}void Init(){ for(int i=0;i<=M;i++)c[i][0]=1; for(int i=1;i<=M;i++){ for(int j=1;j<i;j++){ c[i][j]=c[i-1][j]+c[i-1][j-1]; c[i][j]%=k; } } for(int i=0;i<M;i++){ for(int j=0;j<M;j++){ sum[i+1][j+1]=sum[i+1][j]+sum[i][j+1]-sum[i][j]; if(j<=i&&!c[i][j])sum[i+1][j+1]++; } }}int main(){ Rd(Cas),Rd(k); Init(); while(Cas--){ Rd(n),Rd(m); if(m>n)m=n; Pf(sum[n+1][m+1]); }return 0;}
可惜因为自己比较恐惧数学类型的dp,十分不自信,加之第一天爆炸的心理问题,导致dp的转移没有想太多,写了很奇怪的转移方程,样例过了就假装A掉。太不应该了。
当初WA掉这一题,我才知道自己有多年轻。现在看见这种题目就应该要直接切掉,调试都应该是一个耻辱。
2 0
- [NOIP2016] 组合数问题
- NOIP2016组合数问题
- noip2016组合数问题
- NOIP2016组合数问题
- [NOIP2016]组合数问题
- 组合数问题(NOIP2016)
- NOIP2016 组合数问题
- Noip2016 组合数问题
- noip2016组合数问题
- NOIP2016 Day2T1 组合数问题
- NOIP2016 day2T1 组合数问题
- NOIP2016 T4 组合数问题
- [noip2016]组合数问题 题解
- noip2016组合数问题 组合+前缀和
- 【NOIP2016】洛谷2282 组合数问题
- 【NOIP2016】D2 T1 组合数问题
- Loi Online Judge【NOIP2016】组合数问题
- [NOIP2016提高组]D2T1:组合数问题
- 1003: [ZJOI2006]物流运输
- 解决XCode8 Protocol not available, dumping backtrace问题
- springmvc+mybatis+spring 整合 bootstrap
- sftp
- <C++>_浅谈cin&cout
- NOIP2016组合数问题
- 【python】【leetcode】【算法题目387—First Unique Character in a String】
- js一维数组转二维数组 及 二维数组排序
- ELF64文件逆向分析知识—[0]搭建动态调试环境
- 使用navicat连接数据库时显示1146-table 'mysql.proc' doesn't exist,这个怎么解决
- 中国必须收回的十块领土
- ubuntu 12.04 安装fuerte
- jdbc 得到表结构、主键
- 新人报道~!