dp题,状态dp[i][j],表示以第i字符结尾的数字中对2019取模为j的数字有多少个
#include <bits/stdc++.h>
using namespace std;
const int maxn=2e5+5;
int dp[3][3000];
char str[maxn];
int main()
{
scanf("%s", str);
int i, j, mod=0, x, n=strlen(str);
long long ans=0;
for(i=0; i<n; i++)
{
x=str[i]-'0';
for(j=0; j<=2019; j++)
{
dp[1][(j*10+x)%2019]+=dp[0][j];
}
dp[1][x]++;
for(j=0; j<=2019; j++)
{
dp[0][j]=dp[1][j];
dp[1][j]=0;
}
ans+=dp[0][0];
}
cout<<ans<<endl;
return 0;
}

本文深入探讨了一种动态规划(DP)算法,该算法用于计算字符串表示的数字中,对2019取模为特定值的数字数量。通过详细解释代码实现,包括状态转移方程和边界条件,帮助读者理解如何高效解决此类数学问题。

405

被折叠的 条评论
为什么被折叠?



