题目链接:https://vijos.org/p/2006

当时在考场上只想到了暴力的做法,现在自己看了以后还是没思路,最后看大佬说的杨辉三角才懂这题。。。

我自己总结了一下,我不能反应出杨辉三角的递推是因为对组合C和排列S不熟悉导致的,这些公式基本都是我的短板

从杨辉三角形看出,杨辉三角的i,j位(有0位)就是在i个数选j个出来的方案数,,我们来看下杨辉三角吧

------------------------------------------------------------------------------------------------------------------------------

1

1  1

1  2  1

1  3  3  1

1  4  6  4  1

1  5  10  10   5  1

1  6  15  20   15   6  1

………………………………………………

--------------------------------------------------------------------------------------------------------------------------------

只需要赋初值最上面那个a[0][0]为1就可以预处理出这个2000*2000的图了。。。。

输入n,m只需要判断0<=i<=n和0<=j<=min(n,m)的所有数是不是k的倍数,这个来源就是n,m的左方和上方的数,用以n,m为原点的坐标系说就是第二象限的值,包括x负半轴y正半轴

所以维护一个line[j]表示到当前为止,第j列有几个是k的倍数,然后就是自己这列的个数加上num[i-1][j]

num[i][j]=num[i-1][j]+line[j]

然后就可以愉快的做这道题了,最后提醒一点

所有的杨辉三角的值对k取个模,因为我们只是找k个倍数

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cmath>
#include<iostream>
#include<cstdlib>
#define maxn 2005
using namespace std; int t,k,a[maxn][maxn];
int num[maxn][maxn];
int n,m,line[maxn]; void show(int x){
for(int i=;i<=x;i++){
for(int j=;j<=i;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
} void show2(int x){
for(int i=;i<=x;i++){
for(int j=;j<=i;j++){
printf("%d ",num[i][j]);
}
printf("\n");
}
} int main(){
for(int i=;i<=;i++)
a[i][]=;
scanf("%d%d",&t,&k);
for(int i=;i<=;i++){
for(int j=;j<=i;j++){
a[i][j]=(a[i-][j-]+a[i-][j])%k;
int look=a[i][j];
if(a[i][j]==){//是k倍数
line[j]++;
}
num[i][j]=num[i][j-]+line[j];
}
}
// show(6);
// show2(6);
for(int i=;i<=t;i++){
scanf("%d%d",&n,&m);
m=min(m,n);
printf("%d\n",num[n][m]);
}
//show函数只是用来输出这个表,看下有没有误而已,可以删去
}

总结:很多一看就知道爆数组爆longlong的题,把结果用表格对应写出来,说不定会有意想不到的惊喜

[noip2016]组合数问题<dp+杨辉三角>的更多相关文章

  1. POJ 1163 The Triangle【dp+杨辉三角加强版(递归)】

    The Triangle Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 49955   Accepted: 30177 De ...

  2. 51nod 1118 机器人走方格 解题思路:动态规划 & 1119 机器人走方格 V2 解题思路:根据杨辉三角转化问题为组合数和求逆元问题

    51nod 1118 机器人走方格: 思路:这是一道简单题,很容易就看出用动态规划扫一遍就可以得到结果, 时间复杂度O(m*n).运算量1000*1000 = 1000000,很明显不会超时. 递推式 ...

  3. 2014多校第六场 1007 || HDU 4927 Series 1(杨辉三角组合数)

    题目链接 题意 : n个数,每操作一次就变成n-1个数,最后变成一个数,输出这个数,操作是指后一个数减前一个数得到的数写下来. 思路 : 找出几个数,算得时候先不要算出来,用式子代替,例如: 1 2 ...

  4. hdu5698瞬间移动-(杨辉三角+组合数+乘法逆元)

    瞬间移动 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

  5. 【考试记录】4.8 Table ( 数论数学 --组合数 & 杨辉三角)

    陆陆续续的开始考很多的试,也会更新这些题目记录下来,免得做完了之后毫无印象,就这么水过去了(以前的考试都是如此,哎……) Table (T1) : 样例: 出于对数学题本能的恐惧考场上放弃了此题专攻T ...

  6. java实现组合数_n!_杨辉三角_组合数递推公式_回文数_汉诺塔问题

    一,使用计算机计算组合数 1,设计思想 (1)使用组合数公式利用n!来计算Cn^k=n!/k!(n-k)!用递推计算阶乘 (2)使用递推的方法用杨辉三角计算Cn+1^k=Cn^k-1+Cn^k 通过数 ...

  7. POJ2167Irrelevant Elements[唯一分解定理 组合数 杨辉三角]

    Irrelevant Elements Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 2407   Accepted: 59 ...

  8. hdu 5698(杨辉三角的性质+逆元)

    ---恢复内容开始--- 瞬间移动 Accepts: 1018 Submissions: 3620 Time Limit: 4000/2000 MS (Java/Others) Memory Limi ...

  9. 51nod 1119【杨辉三角】

    思路: = =杨辉三角的应用,组合数的应用: C(N+M,N); 逆元一发,费马小定理,OK. #include <stdio.h> #include <string.h> # ...

随机推荐

  1. Error response:/usr/bin/tf_serving_entrypoint.sh: line 3: 6 Illegal instruction (core dumped) ...

    用docker部署tensorflow-serving:gpu时,参照官方文档:https://tensorflow.google.cn/tfx/serving/docker 本应该是很简单的部署,没 ...

  2. DirectX11--深入理解Effects11、使用着色器反射机制(Shader Reflection)实现一个复杂Effects框架

    前言 如果之前你是跟随本教程系列学习的话,应该能够初步了解Effects11(现FX11)的实现机制,并且可以编写一个简易的特效管理框架,但是随着特效种类的增多,要管理的着色器.资源等也随之变多.如果 ...

  3. 负载均衡框架 ribbon 三

    Ribbon 在 SpringCloud 中的使用 1.构建 Eureka 注册中心 smart-platform-eureka1 (1)导入jar包 <properties> <p ...

  4. 分享一个快速审查js操作Dom的css

    第一步 打开开发者工具第二步 打开 Sources 面板第三步 执行用户操作让对象可见(例如鼠标悬停)第四步 在元素可见的时候按下 F8(与“暂停脚本执行”按钮相同)第五步 点击开发者工具左上角的“选 ...

  5. TLS/SSL 梳理

    数据加密通篇都是为了防止第三方的劫持伪造,保证连接安全, 毫无遮掩的明文传输只有民风淳朴的时候才是安全的. 先是一些基础的内容: 对称加密 最开始为了对数据进行加密,使用的是对称加密算法,即双方协商好 ...

  6. 龙叔拿了20几个offer,原因竟有些泪目...

    我是龙叔,一个分享互联网技术和心路历程的大叔. 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues. https://github.com/midou-tech/articles ...

  7. Wireshark过滤器写法总结

    目录 #Wireshark提供了两种过滤器: 1.捕获过滤器 2.显示过滤器 #过滤器具体写法 #显示过滤器写法 #捕捉过滤器写法 #Wireshark提供了两种过滤器: 1.捕获过滤器 捕获过滤器: ...

  8. (转)GNU风格ARM汇编语法指南(非常详细)1

    原文地址:http://zqwt.012.blog.163.com/blog/static/120446842010111481551809/ 汇编源程序一般用于系统最基本的初始化:初始化堆栈指针.设 ...

  9. The Game Of Life – 数据结构与算法的敲门砖

    The Game Of Life(生命游戏,又称为细胞自动机)几乎是所有数据结构与算法导论教程前言的一个很经典的程序了.这是一个零玩家游戏,发生在一个平面网格里.每个格子的细胞都有死亡和存活两种状态, ...

  10. foobox,基于foobar2000汉化版的CUI配置整合版

    名 称:foobox 作 者:dreamawake 发布博客:https://www.cnblogs.com/foobox/ GitHub: https://github.com/dream7180/ ...