组合数问题(NOIP2016)
题目链接:组合数问题
这道题可以算当年第二简单的。
这里要用到两个技巧:
- 用杨辉三角递推计算组合数
- 运用前缀和
有了这两点,这道题就出来了。
我们先运用杨辉三角推出题目范围内所能用到的所有组合数,然后运用二维前缀和(就是每一行的前缀和),这个前缀和用于保存是k的倍数的数的个数。
下面给代码:
#include<bits/stdc++.h>
using namespace std;
int t,k,f[2010][2010],dp[2010][2010];
int n,m,ans;
int main()
{
scanf("%d%d",&t,&k);
for (int i=1;i<=2002;++i) {
f[i][i]=1;
f[i][1]=i%k; //1
}
for (int i=2;i<=2002;++i) {
for (int j=2;j<=i-1;++j) {
f[i][j]=(f[i-1][j]%k+f[i-1][j-1]%k)%k;
}
}
for (int i=1;i<=2002;++i) {
for (int j=1;j<=i;++j) {
if (f[i][j]==0) dp[i][j]=dp[i][j-1]+1;//2
else dp[i][j]=dp[i][j-1];
}
}
for (int a=1;a<=t;++a) {
scanf("%d%d",&n,&m);
ans=0;
for (int i=1;i<=n;++i) {
if (i>m) ans+=dp[i][m]; //3
else ans+=dp[i][i];
}
printf("%d\n",ans);
}
return 0;
}
主要讲3点:
1处:这里把杨辉三角中最左边的那一列1扔掉了,因为1一定不会整除k;同时取模,这里便于下面计算前缀和。
2处:计算前缀和,如果当前这个数是0(由于已经对k取模了,所以当且仅当为0是代表能整除),数量等于前一个加一,否则直接把前面的粘过来。
3处:因为是前缀和,直接取最后就行。
组合数问题(NOIP2016)的更多相关文章
- CJOJ 2255 【NOIP2016】组合数问题 / Luogu 2822 组合数问题 (递推)
CJOJ 2255 [NOIP2016]组合数问题 / Luogu 2822 组合数问题 (递推) Description 组合数\[C^m_n\]表示的是从n个物品中选出m个物品的方案数.举个例子, ...
- 题解 【NOIP2016】组合数问题
[NOIP2016]组合数问题 Description Input 第一行有两个整数t, k,其中t代表该测试点总共有多少组测试数据,k的意义见[问题描述]. 接下来t行每行两个整数n, m,其中n, ...
- Noip2016提高组 组合数问题problem
Day2 T1 题目大意 告诉你组合数公式,其中n!=1*2*3*4*5*...*n:意思是从n个物体取出m个物体的方案数 现给定n.m.k,问在所有i(1<=i<=n),所有j(1< ...
- UOJ263 【NOIP2016】组合数问题
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- 【NOIP2016提高组】 Day2 T1 组合数问题
题目传送门:https://www.luogu.org/problemnew/show/P2822 ↓题目大意↓ 数据的极限范围:n,m≤2000,k≤21,数据组数≤ ...
- Noip2016组合数(数论)
题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...
- noip2016组合数问题
题目描述 组合数 Cnm 表示的是从 n 个物品中选出 m 个物品的方案数.举个例子,从 (1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3) 这三种选择方法.根据组合数的 ...
- NOIP2016 组合数问题
https://www.luogu.org/problem/show?pid=2822 题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以 ...
- [NOIp2016提高组]组合数问题
题目大意: 给定n,m和k,对于所有的0<=i<=n,0<=j<=min(i,m)有多少对(i,j)满足C(j,i)是k的倍数. 思路: 先预处理出组合数,再预处理一下能整除个 ...
随机推荐
- CSS clip:rect矩形剪裁功能及应用
.clip{ position:absolute; clip: rect(10px 30px 20px 10px); } 最后有必要说明下:clip:rect矩形剪裁只能作用于position:abs ...
- flash Air 在同一个目录下面创建txt,写入字
import flash.filesystem.*; var file:File=new File(File.applicationDirectory.nativePath + '/HelloWorl ...
- 第二章 向量(e)起泡排序
- matlab基础绘图知识
axis([xmin xmax ymin ymax]) %设置坐标轴的最小最大值 xlabel('string') %标记横坐标 ylabe ...
- 微信小程序开发——连续快速点击按钮调用小程序api返回后仍然自动重新调用的异常处理
前言: 小程序开发中诸如获取用户手机号码.调起微信支付.领取卡券等api都是会有一定的延迟的.也就是说通过点击按钮调用这些api的时候,从点击按钮调用api,到支付页面或者领取卡券界面展示出来是需要一 ...
- HDU 2680 Choose the best route(SPFA)
Problem DescriptionOne day , Kiki wants to visit one of her friends. As she is liable to carsickness ...
- bitcode?
今天在网站上看到一篇关于第三方库不包含bitcode就会报错的文章,感觉剖析得很详细,分享出来,希望可以对iOS初入门者有所帮助.下面我们就一起来看看吧. 用Xcode 7 beta 3在真机(iOS ...
- Service里边启动Activity注意事项
Intent intentv = new Intent(Intent.ACTION_VIEW); intentv.setData(uri); intentv.putExtra("keepTi ...
- Html中Select的增删改查排序,和jQuery中的常用功能
这里主要通过select引出常用的jquery 前台页面 <select class="form-control" id="commonSelect"&g ...
- background 和渐变 总结
一,background-position:(图片定位) 三种写法: 1):按%比,左上角最小(0%,0%),右下角最大(100%,%100): 2):(x,y)左上角最小(0,0),右下角最大(ma ...