组合数问题(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的倍数. 思路: 先预处理出组合数,再预处理一下能整除个 ...
随机推荐
- 静态方法调用内部类时候的new 问题
package tool; /** * 静态方法调用内部类时候的new 问题 */ public class aa { // 静态方法 // 静态方法new 有问题 public static voi ...
- Google、微软软件测试之道
扫码时备注或说明中留下邮箱 付款后如未回复请至https://shop135452397.taobao.com/ 联系店主
- Householder矩阵,Givens矩阵
householder 矩阵相当于对某一空间中的元素(向量.矩阵)进行镜像变换,但是模值并不发生变化. H=I-2uuT householder矩阵有几个重要的性质: 1 : H-1 = H 2: ...
- Qt: 记事本源代码
界面编程之实例学习,系统记事本是个极好的参考,初学Delphi及后之c#,皆以记事本为参考,今以Qt学习,亦是如此. 期间搭建开发环境,复习c++知识,寻找模块对应功能,不一而足:现刻录其模块代码,以 ...
- 【php 之获得当前日期以及比较日期大小】
首先看一个例子: $currentTime = date('Y-m-d H:i'); // 获得当前时间 $timer = $searchDated . ' ' . $results['ctrip'] ...
- Win7 IIS 配置错误:不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定是默认设置的
因为 IIS 7 采用了更安全的 web.config 管理机制,默认情况下会锁住配置项不允许更改.运行命令行 %windir%\system32\inetsrv\appcmd unlock conf ...
- [leetcode]123. Best Time to Buy and Sell Stock III 最佳炒股时机之三
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- JNI开发篇——报错:Flag android.useDeprecatedNdk is no longer supported and will be removed in the next……
大概意思就是说: android.useDeprecatedNdk不再支持了 让使用CMake or ndk-build 然后还有链接 解决方法: 1.先通过SDKManager下载:CMake和LL ...
- Sobel Derivatives
https://docs.opencv.org/2.4/doc/tutorials/imgproc/imgtrans/sobel_derivatives/sobel_derivatives.html ...
- 【C++】:STL迭代器使用---[容器::iterator iter;]
参考文章:http://blog.csdn.net/qq_23100787/article/details/51388163 迭代器这种东西,就是为了使访问简单!! 容器::iterator iter ...