【2016-沈阳赛区网络赛-G】记忆化搜索,数位DP(odd-even number,hdu 5898)
2016-09-23 14:28
483 查看
http://www.cnblogs.com/fightfordream/p/5885788.html
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll cnt;
ll bit[20];
ll d[20][20][2][2];
ll dp(ll pos,ll len,ll pre,ll zero,ll f)
{
if(pos<0) return (pre&1)!=(len&1);
ll& ans=d[pos][len][pre][zero];
if(f&&ans!=-1) return ans;
ans=0;
ll d=f?9:bit[pos];
for(ll i=0;i<=d;i++)
if(zero==0)
{
if(i==0) ans+=dp(pos-1,0,0,0,f||i<d);
else ans+=dp(pos-1,1,i&1,1,f||i<d);
}
else
{
if(i&1)
{
if(pre&1) ans+=dp(pos-1,len+1,i&1,1,f||i<d);
else if(len&1) ans+=dp(pos-1,1,i&1,1,f||i<d);
}
else
{
if(!(pre&1)) ans+=dp(pos-1,len+1,i&1,1,f||i<d);
else if(!(len&1)) ans+=dp(pos-1,1,i&1,1,f||i<d);
}
}
return ans;
}
ll solve(ll x)
{
cnt=0;
memset(d,-1,sizeof(d));
while(x)
{
bit[cnt++]=x%10;
x/=10;
}
return dp(cnt-1,0,0,0,0);
}
int main()
{
ll T;
scanf("%I64d",&T);
for(ll t=1;t<=T;t++)
{
ll L,R;
scanf("%I64d %I64d",&L,&R);
printf("Case #%I64d: %I64d\n",t,solve(R)-solve(L-1));
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll cnt;
ll bit[20];
ll d[20][20][2][2];
ll dp(ll pos,ll len,ll pre,ll zero,ll f)
{
if(pos<0) return (pre&1)!=(len&1);
ll& ans=d[pos][len][pre][zero];
if(f&&ans!=-1) return ans;
ans=0;
ll d=f?9:bit[pos];
for(ll i=0;i<=d;i++)
if(zero==0)
{
if(i==0) ans+=dp(pos-1,0,0,0,f||i<d);
else ans+=dp(pos-1,1,i&1,1,f||i<d);
}
else
{
if(i&1)
{
if(pre&1) ans+=dp(pos-1,len+1,i&1,1,f||i<d);
else if(len&1) ans+=dp(pos-1,1,i&1,1,f||i<d);
}
else
{
if(!(pre&1)) ans+=dp(pos-1,len+1,i&1,1,f||i<d);
else if(!(len&1)) ans+=dp(pos-1,1,i&1,1,f||i<d);
}
}
return ans;
}
ll solve(ll x)
{
cnt=0;
memset(d,-1,sizeof(d));
while(x)
{
bit[cnt++]=x%10;
x/=10;
}
return dp(cnt-1,0,0,0,0);
}
int main()
{
ll T;
scanf("%I64d",&T);
for(ll t=1;t<=T;t++)
{
ll L,R;
scanf("%I64d %I64d",&L,&R);
printf("Case #%I64d: %I64d\n",t,solve(R)-solve(L-1));
}
return 0;
}
相关文章推荐
- HDU 5898 odd-even number (数位DP) -2016 ICPC沈阳赛区网络赛
- hdu 5898 - odd-even number (2016沈阳网络赛) - 数位dp
- hdu 5898 odd-even number (数位dp 沈阳网络赛)
- HDU 5898 odd-even number 2016年沈阳网络赛 (数位dp)
- hdu 5898 odd-even number 2016ACM/ICPC沈阳赛区网络赛1007
- hdu 5898 odd even number(acm/icpc沈阳赛区网络赛,数位DP)
- HDU 5898 odd-even number (数位DP) 2016 ACM/ICPC Asia Regional Shenyang Online
- HDU 5898 odd-even number (数位DP) 2016 ACM/ICPC Asia Regional Shenyang Online
- HDU 5898 odd-even number (数位DP)
- hdu 5898 odd-even number 数位dp
- HDU 5898 odd-even number 数位DP
- HDU 5898 odd-even number(数位dp)
- hdu 5898 odd-even number (数位dp)
- hdu_5898_odd-even number(数位DP)
- HDU 5898 odd-even number(数位DP)
- hdu 5898 odd-even number(基础数位DP)
- hdu 5898 odd-even number 数位DP
- hdu 5898 odd-even number (数位dp)
- hdu 5898 odd-even number (数位dp)
- 【2016-沈阳赛区网络赛-I】区间DP(QSC and Master,hdu 5900)