Hdu 2089 不要62 (暴力/数位dp)

来源:互联网 发布:教育统计系统数据导出 编辑:程序博客网 时间:2024/05/12 20:28

应该属于数位dp的一题,暴力方法可过就先偷懒了……

第二段代码是别人的,转化成字符串进行处理

#include <cstdio>__int64 data[1000005];bool OK (int n){int i,j;for (j=1;j<=n;j*=10){if (n%(j*10)-n%j==4*j)  //某位为4return false;if (j>=10 && n%(j*10)-n%(j/10)==62*(j/10))  //某位和低位62return false;}return true;}void Init (){int i=0;__int64 cnt=0;for (i=0;i<=1000000;i++)if (OK(i))data[i]=++cnt;elsedata[i]=cnt;}int main (){int n,m;Init ();while (~scanf("%d%d",&n,&m),n||m)printf("%I64d\n",data[m]-data[n-1]);return 0;}

#include <cstdio>#include <cstring>int dp[1000010];void init (){int i;char str[10];for (i=1;i<1000000;i++){sprintf(str,"%d",i);if (strstr(str,"62")==NULL && strstr(str,"4")==NULL)dp[i]=1;dp[i]+=dp[i-1];}}int main (){init ();int n,m,ans;while (scanf("%d%d",&n,&m),n||m)printf("%d\n",dp[m]-dp[n-1]);return 0;}