题意
中文题我就不说了.
题解
标准数位dp.
我们用
表示当前数字的位数是
位,当前数字模
的余数是
,是否已经出现过
,最高位是否为
的数字总数.
然后用普通的数位
即可通过此题.
谢谢大家.
#include<bits/stdc++.h> //Ithea Myse Valgulious
/*快读快写已被省略.*/
using namespace std;
int dp[20][25][2][2],bit[20],p;
int dfs(int now,int yu,int jd,int st,int lim){
/*当前位数,模13的余数,是否已经出现13,最高位是否为1,最高位是否有要求*/
if (!now) return !yu&&jd;
if (!lim&&~dp[now][yu][jd][st]) return dp[now][yu][jd][st];
int llx=0,i,da=lim?bit[now]:9;
for (i=0;i<=da;++i) llx+=dfs(now-1,(yu*10+i)%13,jd||st&&i==3,i==1,lim&&i==da);
return lim?llx:dp[now][yu][jd][st]=llx;
}
int solve(int n){
for (p=0;n;n/=10) bit[++p]=n%10;
return dfs(p,0,0,0,1);
}
int main(){
memset(dp,-1,sizeof dp);
for (int n;read(n);write(solve(n)),pl);
}