题目:点击打开链接
题意:求小于n且是13的倍数而且含有'13'.
参考这个:点击打开链接
#include <iostream>
#include <string>
#include <string.h>
#include <algorithm>
using namespace std;
int bit[15],dp[15][15][3];
int dfs(int pos,int mod,int have,int lim)
{
int num,i,ans,mx,hx;
if(pos<=0)
return mod==0&&have==2;
if(!lim&&dp[pos][mod][have]!=-1)
return dp[pos][mod][have];
ans=0;
num=lim?bit[pos]:9;
for(i=0;i<=num;i++)
{
mx=(mod*10+i)%13;
hx=have;
if(have==0&&i==1)
hx=1;
if(have==1&&i!=1)
hx=0;
if(have==1&&i==3)
hx=2;
ans+=dfs(pos-1,mx,hx,lim&&i==num);
}
if(!lim)
dp[pos][mod][have]=ans;
return ans;
}
int main()
{
int n,len;
while(cin>>n)
{
memset(bit,0,sizeof(bit));
memset(dp,-1,sizeof(dp));
len=0;
while(n){
bit[++len]=n%10;
n/=10;
}
cout<<dfs(len,0,0,1)<<endl;
}
return 0;
}