hdu3652B-number(数位dp)
2017-07-16 14:38
253 查看
B-number
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6444 Accepted Submission(s):
3739
[align=left]Problem Description[/align]
A wqb-number, or B-number for short, is a non-negative
integer whose decimal form contains the sub- string "13" and can be divided by
13. For example, 130 and 2613 are wqb-numbers, but 143 and 2639 are not. Your
task is to calculate how many wqb-numbers from 1 to n for a given integer
n.
[align=left]Input[/align]
Process till EOF. In each line, there is one positive
integer n(1 <= n <= 1000000000).
[align=left]Output[/align]
Print each answer in a single line.
[align=left]Sample Input[/align]
13
100
200
1000
[align=left]Sample Output[/align]
1
1
2
2
[align=left]Author[/align]
wqb0039
[align=left]Source[/align]
2010
Asia Regional Chengdu Site —— Online Contest
题意:找出1~n范围内含有13并且能被13整除的数字的个数
思路:http://blog.csdn.net/libin56842/article/details/10026063
#include<cstdio> #include<iostream> #include<cstring> using namespace std; int dit[15],f[15][15][3]; int dfs(int pos,int mod,int have,int lim) { int num,ans,mod_x,have_x; if(pos<=0) return mod==0 && have==2; if(!lim && f[pos][mod][have]!=-1) return f[pos][mod][have]; num=lim?dit[pos]:9;ans=0; for(int i=0;i<=num;i++) { mod_x=(mod*10+i)%13; have_x=have; if(have==0 && i==1) have_x=1; if(have==1 && i!=1) have_x=0; if(have==1 && i==3) have_x=2; ans+=dfs(pos-1,mod_x,have_x,lim&&i==num); } if(!lim) f[pos][mod][have]=ans; return ans; } int main() { int n,len; while(~scanf("%d",&n)) { memset(dit,0,sizeof dit); memset(f,-1,sizeof f);len=0; while(n) { dit[++len]=n%10; n/=10; }dit[len+1]=0; printf("%d\n",dfs(len,0,0,1)); } return 0; }
相关文章推荐
- 【hdu3652】【数位DP】B-number
- HDU3652_B-number_数位DP&记忆化搜索
- HDU3652 B-number 数位DP
- [hdu3652][B-number] (数位dp)
- HDU3652 B-number(数位DP)
- [暑假集训--数位dp]hdu3652 B-number
- hdu3652 B-number 数位dp
- hdu3652B-number (数位dp)
- hdu3652 B-number(数位DP)
- HDU3652B-number(数位DP)
- hdu3652 B-number 数位dp
- 【HDU3652】B-number-数位DP
- hdu3652 B-number(数位dp+dfs)
- hdu3652 B-number(数位dp)
- hdu3652 B-number[数位dp]
- 【数位DP】 hdu3652 B-number
- HDU3652:B-number(数位DP)
- HDU3652:B-number(数位dp + 同余)
- hdu3652 A-B number 数位DP
- HDU3652 B-number [数位DP]