您的位置:首页 > 其它

dp——洛谷P2822 组合数问题

2017-04-14 10:41 183 查看
https://www.luogu.org/problem/show?pid=2822

天哪,我水题都不会做了;

太可怕了;

一道dp题披上了数论的的大衣;

就是先搞个杨辉三角+取模;

然后直接矩形前缀和;

我他妈想了半天的数论。。。。。。

Fop_zz说他当年10直接做好了;

…………

#include<map>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
int f[2005][2005],d[2005][2005];
int n,m,t,k,ans;
void make(){
memset(f,-1,sizeof f);
for(int i=1;i<=2000;i++)
for(int j=0;j<=i;j++)
if(j==0||j==i)f[i][j]=1%k;else
f[i][j]=(f[i-1][j]+f[i-1][j-1])%k;
for(int i=1;i<=2000;i++)
for(int j=1;j<=2000;j++)
d[i][j]=d[i-1][j]+d[i][j-1]-d[i-1][j-1]+(int)(f[i][j]==0);
}
int main()
{
scanf("%d%d",&t,&k);
make();
while(t--){
scanf("%d%d",&n,&m);
printf("%d\n",d
[m]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: