「清华集训2016」组合数问题(数位dp)
时间:2020-04-17
本文章向大家介绍「清华集训2016」组合数问题(数位dp),主要包括「清华集训2016」组合数问题(数位dp)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
「清华集训2016」组合数问题(数位dp)
题意:
给定\(n,m,k\) 求:\(\sum_1^n\sum_1^{min(i,m)} [k|C(i,j)]\)
分析:
根据\(\text{lucas}\)定理,\(C(i,j)=C(i\mod k,j\mod k)C(\frac{i}{k},\frac{j}{k})\)
只要出现一个\(i \mod k>j \mod k\)或\(\frac{i}{k},\frac{j}{k}\)就会出现
模拟一下这个递归过程,就会发现每次出现的\(i \mod k ,j \mod k\)就是把\(k\)进制下的\(i,j\)依次拆开
所以只要\(k\)进制下\(j\)有一位大于\(i\)即可,数位dp
const int P=1e9+7;
int t,k;
ll A,B;
int a[70],b[70];
ll dp[62][2][2][2][2];
ll dfs(int p,int lim1,int lim2,int lim3,int fl) {
// i是否受到限制,j是否受到限制,是否出现了i>j的位置,是否出现了i<j的位置
if(p==0) return fl;
if(~dp[p][lim1][lim2][lim3][fl]) return dp[p][lim1][lim2][lim3][fl];
ll ans=0;
rep(i,0,lim1?a[p]:k-1) rep(j,0,lim2?b[p]:k-1) {
if(!lim3 && i<j) continue;
ans=(ans+dfs(p-1,lim1&&(i==iend),lim2&&(j==jend),lim3||(i>j),fl||(i<j)))%P;
}
return dp[p][lim1][lim2][lim3][fl]=ans;
}
ll Solve() {
int c1=0,c2=0;
memset(a,0,sizeof a),memset(b,0,sizeof b);
while(A) a[++c1]=A%k,A/=k;
while(B) b[++c2]=B%k,B/=k;
return dfs(max(c1,c2),1,1,0,0);
}
int main(){
t=rd(),k=rd();
rep(kase,1,t) {
A=rd<ll>(),B=rd<ll>();
memset(dp,-1,sizeof dp);
printf("%lld\n",Solve());
}
}
原文地址:https://www.cnblogs.com/chasedeath/p/12721783.html
- 用python搭建一个校园维基网站(二)—— 可编辑内容的首页的创建
- Django博客教程(四):让 django 完成翻译—迁移数据库模型
- Calendar类中add/set/roll方法的区别
- 如何构建一个分布式爬虫(理论篇)
- Python微型Web框架Bottle源码分析
- VirtualBox相关问题总结
- Java 枚举7常见种用法
- ALI的Tensorflow炼成与GAN科普
- LaTeX内容总结
- (60) 随机读写文件及其应用 - 实现一个简单的KV数据库 / 计算机程序的思维逻辑
- java反射机制
- 突发 |“永恒之蓝”漏洞紧急应对方案
- 摩拜单车爬虫源码及解析
- 用Python实现微信接口(三)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Docker Dockerfile 指令详解与实战案例
- flume kafka和sparkstreaming整合
- Docker如何搭建私有registry镜像仓库
- Harbor介绍与企业级私有Docker镜像仓库搭建
- 如何查看docker run启动参数命令
- YAML 语言教程与使用案例
- 计算等压面要素场的基本检验指标
- Kubernetes K8S之SSL证书有效期修改
- Kubernetes K8S之通过yaml文件创建Pod与Pod常用字段详解
- Kubernetes K8S之kubectl命令详解及常用示例
- Kubernetes K8S之Pod 生命周期与init container初始化容器详解
- Kubernetes K8S之Pod生命周期与探针检测
- Kubernetes K8S之Pod 生命周期与postStart、preStop事件
- Kubernetes K8S之资源控制器RC、RS、Deployment详解
- python教程 | 最标准的地图调用方式(国家测绘局提供数据)