李悦是谁的儿子,美女江山一锅煮txt下载,男厕情侣间
time limit: 1000/1000 ms (java/others) memory limit: 32768/32768 k (java/others)
total submission(s): 64679 accepted submission(s):
25710
#include<stdio.h> #include<string.h> int a,b,dp[20][2],shu[20]; int dfs(int len,bool if6,bool up) { if(len==0) return 1; if(!up&&dp[len][if6]) return dp[len][if6]; //记忆 int cnt=0,maxx=up?shu[len]:9; //循环限制 for(int i=0;i<=maxx;i++) { if(i==4||if6&&i==2) //搜索到4时直接跳出不计数,当上一位为6并且这一位为2时跳出不计数 continue ; cnt+=dfs(len-1,i==6,up&&i==maxx); } return up?cnt:dp[len][if6]=cnt; } int solve(int x) { int k=0; memset(shu,0,sizeof(shu)); while(x) { shu[++k]=x%10; x/=10; } return dfs(k,false,true); } int main() { while(scanf("%d%d",&a,&b)!=eof&&(a+b)) { printf("%d\n",solve(b)-solve(a-1)); } return 0; }
现在解释一下搜索。len是当前搜索位,if6为上一位是否为6,up为上一位是否是最大值(还是654321,当len=6,up为ture,所以循环只能到达i==6;如果len=6,i<6,dfs,那么up为false,所以循环可以到9).
直观数字 给定数字235,搜索len=3时,如果循环中i=1,那么下一位可以搜索到9,即从100-190;如果循环中i=2,那么下一位搜索只能循环到3,即从200-230。
解释起来有些困难,理解代码更容易一点。
因水平有限,只能解释到这里了。。。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
如何在没有core文件的情况下用dmesg+addr2line定位段错误
用QT制作3D点云显示器——QtDataVisualization
网友评论