洛谷 2822 组合数问题——质因数有关的dp
2024-09-05 12:44:38
题目:https://www.luogu.org/problemnew/show/P2822
发现 k 都是一样的。所以可以设dp[ i ][ j ]表示 n<=i,m<=j 的答案。发现它就像一个二维平面,所以可以dp[ i ][ j ]=dp[ i-1 ][ j ]+dp[ i ][ j-1 ]-dp[ i-1 ][ j-1 ]+[ c[ i ][ j ]%k==0 ];
先写了记录每个数的阶乘含多少个k,然后看减掉之后还有没有k。但这样没考虑k的因数组成k的情况。所以应该把k质因数分解,看减掉的该因数个数与k里的该因数个数的大小关系。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=1e4+;
int t,k,n[M],m[M],mxn,mxm,mx,a[N][],dp[N][N],cnt,zs[],nm[];
int rdn()
{
int ret=;char ch=getchar();
while(ch>''||ch<'') ch=getchar();
while(ch>=''&&ch<='') ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
return ret;
}
int main()
{
t=rdn();k=rdn();
for(int i=;i<=t;i++)
n[i]=rdn(),m[i]=rdn(),mxn=max(mxn,n[i]),mxm=max(mxm,m[i]);
mx=max(mxn,mxm);
int tmp=k;
for(int i=;i<=tmp;i++)
if(tmp%i==)
{
zs[++cnt]=i;
while(tmp%i==)tmp/=i,nm[cnt]++;
}
for(int i=;i<=mx;i++)
for(int j=,s=i;j<=cnt;j++,s=i)
while(s) s/=zs[j],a[i][j]+=s;//数i含有多少第j个质因数
// for(int i=1;i<=mx;i++) printf("a[%d]=%d\n",i,a[i]);
for(int i=;i<=mxn;i++)
{
for(int j=;j<=mxm&&j<i;j++)
{
dp[i][j]=dp[i][j-]+dp[i-][j]-dp[i-][j-];
bool flag=;
for(int o=,d;o<=cnt;o++)
{
d=a[i][o]-a[j][o]-a[i-j][o];
if(d<nm[o]){flag=;break;}
}
dp[i][j]+=(!flag);
// printf("dp[%d][%d]=%d(ai-aj-a(i-j)=%d)\n",i,j,dp[i][j],
// a[i]-a[j]-a[i-j]);
}
for(int j=i;j<=mxm;j++) dp[i][j]=dp[i][j-];
// printf("dp[%d][%d]=%d\n",i,j,dp[i][j]);
}
for(int i=;i<=t;i++)
printf("%d\n",dp[n[i]][m[i]]);
return ;
}
最新文章
- 如何在windows下的Python开发工具IDLE里安装其他模块?
- 浅谈人脸检测之Haar分类器方法
- Winfrom中ListBox绑定List数据源更新问题
- [转载] 高流量大并发Linux TCP 性能调优
- AngularJS理论基础
- DOM----comment类型
- MAC下的Intellij IDEA常用快捷键
- Linux下巧用cat与EOF实现文件的替换和追加
- [零] JavaIO入门简介 程序设计语言 为什么需要IO库
- RDay1-Problem 1 A
- Visual Studio Code create the aps.net core project(Visual Studio Code 创建asp.net core项目)
- 数据预处理:独热编码(One-Hot Encoding)和 LabelEncoder标签编码
- 使用Java+Kotlin双语言的LeetCode刷题之路(一)
- Go语言之高级篇beego框架之Controller
- 【SqlServer】解析SqlServer中的事务
- VS VC 读取 INI文件
- javascript的循环使用
- 使用 IIS 过程中遇到的一些问题
- 3x3开窗中值滤波器的FPGA硬件实现
- jsp页面:js方法里嵌套java代码(是操作数据库的),如果这个js 方法没被调用,当jsp页面被解析的时候,不管这个js方法有没有被调用这段java代码都会被执行?