这道题的大致意思就是给你一个数n,让你去统计[1,n]之间含有13同时能够被13整除的数的个数。
这是一道比较简单的数位dp的题。主要难点是如何去计算这个数是否能够被13整除,这里就用到mod。
上一个位置余数*10加上这个位子的数去%13,最后只要判断这个余数是否等于0就可以了。
具体代码如下:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int a[20]; 7 int dp[20][20][3]; 8 /* 9 dp[i][j][k] j表示余数 10 k==0不包含13且不以1结尾 11 k==1 不包含13且1结尾 12 k==2 包含13 13 */ 14 int dfs(int pos,int mod,int sta,bool lim){ 15 if(pos<=0) 16 return mod==0&&sta == 2; 17 if(!lim&&dp[pos][mod][sta]!=-1) 18 return dp[pos][mod][sta]; 19 int up = lim ? a[pos] : 9; 20 int ans = 0; 21 for (int i = 0; i <= up;i++) 22 { 23 int mod1 = (mod * 10 + i) % 13;//计算余数 24 int sta1 = sta; 25 if(sta==1&&i==3) 26 sta1 = 2; 27 else if(sta==0&&i==1) 28 sta1 = 1; 29 else if(sta==1&&i!=1) 30 sta1 = 0; 31 ans += dfs(pos - 1, mod1,sta1, lim && i == up); 32 } 33 if(!lim){ 34 dp[pos][mod][sta] = ans; 35 } 36 return ans; 37 } 38 int solve(int x){//计算数各个位置上的值 39 int pos = 0; 40 while(x){ 41 a[++pos] = x % 10; 42 x /= 10; 43 } 44 return dfs(pos,0, 0, true); 45 } 46 int main(){ 47 int r; 48 while(~scanf("%d",&r)){ 49 memset(dp, -1, sizeof dp); 50 printf("%d ", solve(r)); 51 } 52 }
祝各位大佬身体健康,ac愉快。
1 /**********/**********/**********//**********//**********//**********//**********/ 2 <!-- 3 :: 4 :;J7, :, ::;7: 5 ,ivYi, , ;LLLFS: 6 :iv7Yi :7ri;j5PL 7 ,:ivYLvr ,ivrrirrY2X, 8 :;r@Wwz.7r: :ivu@kexianli. 9 :iL7::,:::iiirii:ii;::::,,irvF7rvvLujL7ur 10 ri::,:,::i:iiiiiii:i:irrv177JX7rYXqZEkvv17 11 ;i:, , ::::iirrririi:i:::iiir2XXvii;L8OGJr71i 12 :,, ,,: ,::ir@mingyi.irii:i:::j1jri7ZBOS7ivv, 13 ,::, ::rv77iiiriii:iii:i::,rvLq@huhao.Li 14 ,, ,, ,:ir7ir::,:::i;ir:::i:i::rSGGYri712: 15 ::: ,v7r:: ::rrv77:, ,, ,:i7rrii:::::, ir7ri7Lri 16 , 2OBBOi,iiir;r:: ,irriiii::,, ,iv7Luur: 17 ,, i78MBBi,:,:::,:, :7FSL: ,iriii:::i::,,:rLqXv:: 18 : iuMMP: :,:::,:ii;2GY7OBB0viiii:i:iii:i:::iJqL;:: 19 , ::::i ,,,,, ::LuBBu BBBBBErii:i:i:i:i:i:i:r77ii 20 , : , ,,:::rruBZ1MBBqi, :,,,:::,::::::iiriri: 21 , ,,,,::::i: @arqiao. ,:,, ,:::ii;i7: 22 :, rjujLYLi ,,:::::,:::::::::,, ,:i,:,,,,,::i:iii 23 :: BBBBBBBBB0, ,,::: , ,:::::: , ,,,, ,,::::::: 24 i, , ,8BMMBBBBBBi ,,:,, ,,, , , , , , :,::ii::i:: 25 : iZMOMOMBBM2::::::::::,,,, ,,,,,,:,,,::::i:irr:i:::, 26 i ,,:;u0MBMOG1L:::i:::::: ,,,::, ,,, ::::::i:i:iirii:i:i: 27 : ,iuUuuXUkFu7i:iii:i:::, :,:,: ::::::::i:i:::::iirr7iiri:: 28 : :rk@Yizero.i:::::, ,:ii:::::::i:::::i::,::::iirrriiiri::, 29 : 5BMBBBBBBSr:,::rv2kuii:::iii::,:i:,, , ,,:,:i@petermu., 30 , :r50EZ8MBBBBGOBBBZP7::::i::,:::::,: :,:,::i;rrririiii:: 31 :jujYY7LS0ujJL7r::,::i::,::::::::::::::iirirrrrrrr:ii: 32 ,: :@kevensun.:,:,,,::::i:i:::::,,::::::iir;ii;7v77;ii;i, 33 ,,, ,,:,::::::i:iiiii:i::::,, ::::iiiir@xingjief.r;7:i, 34 , , ,,,:,,::::::::iiiiiiiiii:,:,:::::::::iiir;ri7vL77rrirri:: 35 :,, , ::::::::i:::i:::i:i::,,,,,:,::i:i:::iir;@Secbone.ii::: 36 37 -- 38 39 40 /** 41