您的位置:首页 > 其它

hdu 2089 不要62

2016-08-06 11:07 295 查看
题意:求区间内不包含4和连续62的数的个数

分析:从高位向低位枚举,4的话,直接不枚举就行了,62用一个标志来记录上一个数是否是6,还要加一个表示上面是否达到上限,没有就可以枚举到9,否则枚举到liimt[len]

入门题,这个模型以后会经常用到

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int dp[8][2],d[8];

int dfs(int len,int state,int f){
if(!len)return 1;
int& tmp=dp[len][state];
if(!f&&tmp!=-1);
int maxn=!f?9:d[len-1];
int ret=0;
for(int i=0;i<=maxn;i++){
if(i==4||i==2&&state)continue;
ret+=dfs(len-1,i==6,f&&i==maxn);
}
if(!f)tmp=ret;
return ret;
}

int solve(int x){
memset(dp,-1,sizeof(dp));
int len=0;
while(x>0){
d[len++]=x%10;
x/=10;
}
return dfs(len,0,1);
}

int main(){
int x,y;
while(cin>>x>>y&&x+y)
cout<<solve(y)-solve(x-1)<<endl;

return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: