鉴于N和K,我们必须找到N划分为最多K个部分的数量
模m。
我想知道是否有任何公式可以计算这种类型的查询。
我也知道有关递归公式pk(n)= pk(nk)+ pk-1(n)的信息
图
但这可以在N和K较小时使用
我需要找到1≤N,K≤2 * 10 ^ 5
例如:-
p3(5)= 5,14,23,113,122 = 5
p3(3)= 3,12,111 = 3
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll pk(ll n,ll k,ll m)
{
if(k==1)
return 1;
if(n<0)
return 0;
return (pk(n-k,k,m)%m+pk(n,k-1,m)%m)%m;
}
int main()
{
ll t,m;
cin>>t>>m;
while(t--)
{
ll n,k;
cin>>n>>k;
cout<<pk(n,k,m)<<endl;
}
return 0;
}
Here is my implementation using the recurrence but it is giving TLE for
large values as time complexity is 2^n
我想创建一个dp表来查找类似的值
f(n,k):
if(n==k)
return 1;
if(n==0)
return 0;
if(dp[n][k]!=-1)
return dp[n][k];
b=f(n-k,k)+f(n-1,k-1);
return dp[n][k]=b;
DP表应类似于this