UESTC-250-数位dp
2017-05-08 19:50
274 查看
题目大意:求一个区间内有多少个数中相邻数位之差大于等于2;
题目解析::dp的第二维保存上一个数是多少,注意要处理前导零;
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
typedef long long ll;
ll dp[20][12];
int num[20];
int ab(int x,int y)
{
if(x>y) return x-y;
return y-x;
}
ll dfs(int pos,int pre,bool lead,bool limit)
{
if(pos==-1) return 1;
if(!lead&&!limit&&dp[pos][pre]!=-1) return dp[pos][pre];
int u=limit?num[pos]:9;
ll ans=0;
for(int i=0;i<=u;i++)
{
if(lead&&i==0) ans+=dfs(pos-1,-4,lead&&i==0,limit&&i==u);
else if(ab(i,pre)>=2) ans+=dfs(pos-1,i,lead&&i==0,limit&&i==u);
}
if(!lead&&!limit) return dp[pos][pre]=ans;
return ans;
}
ll solve(ll n)
{
ll cnt=0;
while(n)
{
num[cnt++]=n%10;
n/=10;
}
return dfs(cnt-1,-4,true,true);
}
int main()
{
ll a,b;
memset(dp,-1,sizeof(dp));
while(scanf("%lld%lld",&a,&b)!=EOF)
{
printf("%lld\n",solve(b)-solve(a-1));
}
return 0;
}
题目解析::dp的第二维保存上一个数是多少,注意要处理前导零;
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
typedef long long ll;
ll dp[20][12];
int num[20];
int ab(int x,int y)
{
if(x>y) return x-y;
return y-x;
}
ll dfs(int pos,int pre,bool lead,bool limit)
{
if(pos==-1) return 1;
if(!lead&&!limit&&dp[pos][pre]!=-1) return dp[pos][pre];
int u=limit?num[pos]:9;
ll ans=0;
for(int i=0;i<=u;i++)
{
if(lead&&i==0) ans+=dfs(pos-1,-4,lead&&i==0,limit&&i==u);
else if(ab(i,pre)>=2) ans+=dfs(pos-1,i,lead&&i==0,limit&&i==u);
}
if(!lead&&!limit) return dp[pos][pre]=ans;
return ans;
}
ll solve(ll n)
{
ll cnt=0;
while(n)
{
num[cnt++]=n%10;
n/=10;
}
return dfs(cnt-1,-4,true,true);
}
int main()
{
ll a,b;
memset(dp,-1,sizeof(dp));
while(scanf("%lld%lld",&a,&b)!=EOF)
{
printf("%lld\n",solve(b)-solve(a-1));
}
return 0;
}
相关文章推荐
- UESTC 250 windy数 数位dp
- UESTC 250 windy数(数位DP)
- UESTC 250 windy数(数位DP)
- uestc 250 windy数(数位dp)
- uestc 250 windy数(数位dp)
- UESTC 250 数位DP
- UESTC 250 windy数 (数位DP)
- uestc 250 windy数 【数位dp】
- 数位DP-UESTC - 250-windy数
- UESTC 250 windy数(数位DP)
- UESTC 250 windy数(数位DP)
- uestc 250 windy数 【数位dp】
- UESTC 250 windy数 (数位DP)
- [数位dp] uestc 250 windy数
- 几个基础数位DP (hdu 2089,hdu 3555 ,uestc 1307 windy 数)
- UESTC 884 方老师的专题讲座 --数位DP
- UESTC 2015dp专题 H 邱老师选妹子 数位dp
- uestc 1307 数位DP
- 2015 UESTC Training for Dynamic Programming H - 邱老师选妹子(数位dp)
- UESTC 1307 windy数(数位DP)