题解:P10262 [GESP样题 六级] 亲朋数
dp 方法有点难想,如果能力不够建议先写搜索再看题解。
DP 方法
我们定义
故此我们可以推出一个公式:字有点丑,见谅)。
由于题目要求我们求出有多少字串是可以被
最后附上 AC 代码:
#include<bits/stdc++.h>
using namespace std;
long long dp[129],f[129],ans; //dp[i]为原题解意思
int p;
string s;
int main(){
cin>>p>>s;
int n=s.size();
for(int i=0;i<n;i++)
{
int q=s[i]-'0';
q%=p;
for(int j=0;j<p;j++) f[j]=dp[j],dp[j]=0; //枚举模数
for(int j=0;j<p;j++) dp[(j*10+q)%p]+=f[j];
dp[q]++;
ans+=dp[0];
}
cout<<ans;
return 0;
}