luoguP2822-组合数问题(基础DP)
题目链接:https://www.luogu.org/problemnew/show/P2822
题意:输入T和k,有T组询问。每组询问输入n、m,求C(i,j)能模k的个数(0<=i<=n,0<=j<=min(i,m))。
思路:首先需要离线操作,因为n<=2000,我们可以把所有可能的n,m的结果全求出来。用dp[i][j]表示C(x,y)能模k的个数(0<=x<=i,0<=y<=min(x,m)),f[i][j]表示C(i,y)能模k的个数(0<=y<=min(i,m)),C[i][j]表示组合数C(i,j)能否整除k,若能,值为0,否则不为0。
则有如下状态转移方程:
C[i][j]=(C[i-1][j-1]+C[i-1][j])%k
f[i][j]=f[i][j-1]+(C[i][j]==0)
dp[i][j]=dp[i-1][j]+f[i][j]
但是要注意边界的特殊情况。
AC代码:
#include<cstdio>
#include<algorithm>
using namespace std; const int maxn=; int dp[maxn][maxn],f[maxn][maxn],C[maxn][maxn];
int T,k,n,m; void init(){
C[][]=%k;
for(int i=;i<=;++i){
C[i][]=%k;
for(int j=;j<=i;++j)
C[i][j]=(C[i-][j-]+C[i-][j])%k;
} f[][]=(C[][]==);
for(int i=;i<=;++i){
f[i][]=(C[i][]%k==);
for(int j=;j<=i;++j)
f[i][j]=f[i][j-]+(C[i][j]==);
} dp[][]=f[][];
for(int i=;i<=;++i)
for(int j=;j<=i;++j)
dp[i][j]=dp[i-][min(i-,j)]+f[i][j];
} int main(){
scanf("%d%d",&T,&k);
init();
while(T--){
scanf("%d%d",&n,&m);
if(m>n) m=n;
printf("%d\n",dp[n][m]);
}
return ;
}
luoguP2822-组合数问题(基础DP)的更多相关文章
- 基础dp
队友的建议,让我去学一学kuangbin的基础dp,在这里小小的整理总结一下吧. 首先我感觉自己还远远不够称为一个dp选手,一是这些题目还远不够,二是定义状态的经验不足.不过这些题目让我在一定程度上加 ...
- 基础DP(初级版)
本文主要内容为基础DP,内容来源为<算法导论>,总结不易,转载请注明出处. 后续会更新出kuanbin关于基础DP的题目...... 动态规划: 动态规划用于子问题重叠的情况,即不同的子问 ...
- hdu 5586 Sum 基础dp
Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Desc ...
- hdu 4055 Number String (基础dp)
Number String Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- 训练指南 UVA - 10917(最短路Dijkstra + 基础DP)
layout: post title: 训练指南 UVA - 10917(最短路Dijkstra + 基础DP) author: "luowentaoaa" catalog: tr ...
- 训练指南 UVA - 11324(双连通分量 + 缩点+ 基础DP)
layout: post title: 训练指南 UVA - 11324(双连通分量 + 缩点+ 基础DP) author: "luowentaoaa" catalog: true ...
- 「kuangbin带你飞」专题十二 基础DP
layout: post title: 「kuangbin带你飞」专题十二 基础DP author: "luowentaoaa" catalog: true tags: mathj ...
- M - 基础DP
M - 基础DP Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descriptio ...
- lightoj1004【基础DP】
从低端到顶端求个最大值: 思路: 基础DP,递推 #include<cstdio> #include<queue> #include<map> #include&l ...
- hdu 4489 The King’s Ups and Downs(基础dp)
The King’s Ups and Downs Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
随机推荐
- webpack官方文档分析(一):安装
一:安装 1.首先要安装Node.js->node.js下载 2.本地安装 要安装最新版本或特定版本,运行如下: npm install --save-dev webpack npm insta ...
- 2019牛客暑期多校训练营(第二场)A 数学
题意 eddy走一个长度为\(n\)的环,每次能往前或往后走一步,问走到\(m\)点恰好走完所有点至少一次的概率,前\(i\)个询问的答案要乘起来 分析 \(n=1,m=0\),答案为\(1\) \( ...
- Jmeter(六)关联之XPath提取器
如果请求返回的消息为xml或html格式的,可以用XPath提取器来提取需要的数据 以http://www.weather.com.cn/为例: 先新建一个HTTP请求GetCityURL,获取城市天 ...
- Java线程之生命周期
简述 以下类图展示了线程生命周期中不同的状态.我们可以创建一个线程并启动它,但是线程状态从Runnable.Running.Blocked等状态的变化取决于系统线程调度器,java本身并不能完全控制. ...
- python-numpy-1
mean() mean() 函数定义: numpy.``mean(a, axis=None, dtype=None, out=None, keepdims=<class numpy._globa ...
- Django 详解
Django是一个开源的Web应用框架,由Python写成.采用MVC的软件设计模式,主要目标是使得开发复杂的.数据库驱动的网站变得简单.Django注重组件的重用性和“可插拔性”,敏捷开发和DRY法 ...
- [CSP-S模拟测试]:物理课(数学)
题目传送门(内部题144) 输入格式 从$physics.in$读入数据. 第一行一个数$T$,代表有$T$组数据.接下来$T$行每行$4$个浮点数,分别为$\theta,v,d,g$,保留到小数点后 ...
- ajax+php (jquery.form插件)实现异步文件上传
<!DOCTYPE html> <html lang="CN"> <head> <title>upload model</ti ...
- String,int,Integer之间的转换
public class Test{ public static void main(String[] args) { //int转换成Integer Integer in = new Integer ...
- Selenium2Library测试web
Selenium 定位元素 ▲ Locator 可以id或name来用定位界面元素 也可以使用XPath或Dom,但是,必须用XPath=或Dom=来开头 ▲ 最好使用id来定位,强烈建议强制要求开发 ...