题意:一个数,如果满足奇数的数字出现偶数次,偶数的数字出现奇数次,

就是符合的数,注比如:12313  就满足,因为1 3出现了偶数次。2出现了奇数次

思路,对于这道题,就是状态压缩加dp;

对于一个数字来说,0~9每一位,都只有3种状态量,要么从未出现,要么出现次数为奇

要么为偶,所以可以用3进制来表示,通过3进制表示出其状态,然后到pos-1的时候

判断0~9的各个状态是否符合条件即可

 #include<cstdio>
#include<string.h>
using namespace std;
typedef long long ll;
ll dp[][];
ll a[];
int check(int s)
{
for(int i=;i<=;++i){
int k=s%;
s/=;
if(k==) continue;
else if((i&)&&k==) return ; //若为奇数,如果出现次数也为奇,则退出;
else if(!(i&)&&k==) return ; //若为偶数,。。。。。。。。。。。。。。
}
return ;
}
//三进制代码;
int change(int d,int s)
{
int temp[];
for(int i=;i<=;i++){
temp[i]=s%;
s/=;
}
s=;
if(temp[d]==) temp[d]=; //表示其状态的代码
else temp[d]=-temp[d]; //表示其状态的代码
for(int i=;i>=;i--)
s=s*+temp[i];
return s;
} ll dfs(ll pos,ll sum,bool flag,bool limit)
{
//flag是判断前导0用的
if(pos==-) return check(sum);
if(!limit&&dp[pos][sum]!=-) return dp[pos][sum];
int up=limit? a[pos]:;
ll ans=;
for(int i=;i<=up;i++)
//如果之前一直都是0,i==0,则sum的值依旧等于0
ans+=dfs(pos-,(flag==&&i==)? :change(i,sum),flag||i>,limit&&i==a[pos]);
if(!limit) dp[pos][sum]=ans; //如果i已经大于0,则再也没有前导0这一说法
return ans;
}
ll solve(ll x)
{
int pos=;
while(x){
a[pos++]=x%;
x/=;
}
return dfs(pos-,,,true);
}
int main()
{
int T;
scanf("%d",&T);
memset(dp,-,sizeof(dp));
while(T--){
ll l,r;
scanf("%lld%lld",&l,&r);
printf("%lld\n",solve(r)-solve(l-));
}
return ;
}

数位dp(Balanced Numbers )的更多相关文章

  1. Balanced Numbers (数位dp+三进制)

    SPOJ - BALNUM 题意: Balanced Numbers:数位上的偶数出现奇数次,数位上的奇数出现偶数次(比如2334, 2出现1次,4出现1次,3出现两次,所以2334是 Balance ...

  2. Balanced Numbers (数位DP)

    Balanced Numbers https://vjudge.net/contest/287810#problem/K Balanced numbers have been used by math ...

  3. SPOJ BALNUM - Balanced Numbers - [数位DP][状态压缩]

    题目链接:http://www.spoj.com/problems/BALNUM/en/ Time limit: 0.123s Source limit: 50000B Memory limit: 1 ...

  4. SPOJ10606 BALNUM - Balanced Numbers(数位DP+状压)

    Balanced numbers have been used by mathematicians for centuries. A positive integer is considered a ...

  5. Balanced Numbers(数位dp)

    Description Balanced numbers have been used by mathematicians for centuries. A positive integer is c ...

  6. spoj Balanced Numbers(数位dp)

    一个数字是Balanced Numbers,当且仅当组成这个数字的数,奇数出现偶数次,偶数出现奇数次 一下子就相到了三进制状压,数组开小了,一直wa,都不报re, 使用记忆化搜索,dp[i][s] 表 ...

  7. SPOJ - BALNUM Balanced Numbers(数位dp+三进制状压)

    Balanced Numbers Balanced numbers have been used by mathematicians for centuries. A positive integer ...

  8. SPOJ - BALNUM - Balanced Numbers(数位DP)

    链接: https://vjudge.net/problem/SPOJ-BALNUM 题意: Balanced numbers have been used by mathematicians for ...

  9. SPOJ BALNUM Balanced Numbers (数位dp)

    题目:http://www.spoj.com/problems/BALNUM/en/ 题意:找出区间[A, B]内所有奇数字出现次数为偶数,偶数字出现次数为计数的数的个数. 分析: 明显的数位dp题, ...

  10. HDU 3709 Balanced Number (数位DP)

    Balanced Number Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

随机推荐

  1. 【13】正则化网络激活函数(Batch归一化)

    正则化网络激活函数(Batch归一化): 在神经网络训练中,只是对输入层数据进行归一化处理,却没有在中间层进行归一化处理.要知道,虽然我们对输入数据进行了归一化处理,但是输入数据经过σ(WX+b)σ( ...

  2. openlayers轨迹播放

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. PHPstorm主题、插件等相关推荐

    自己想升级PHPstorm,但是一直升级不了,捣腾一下午,终于它over掉了. 重新下载安装,发现应该把自己喜欢的插件.主题配色等记录一下. material theme UI主题插件 不知道为啥,看 ...

  4. Git 版本回退的几种操作方法

    1, 结合使用 git reset --hard <commit id> , git reset --hard HEAD^,  git reflog , git log 1) 使用 git ...

  5. [USACO12FEB] 附近的牛 Nearby Cows - 树形dp,容斥

    给你一棵 \(n\) 个点的树,点带权,对于每个节点求出距离它不超过 \(k\) 的所有节点权值和 \(m_i\) 随便定一个根,设\(f[i][j]\)表示只考虑子树,距离为\(j\)的权值和,\( ...

  6. PHP实现微信公众号授权获取用户信息

    class WxAuthModel extends BaseModel { var $appId = APPID; var $appSecret = APPSECRET; /*微信x小程序,获取微信o ...

  7. C++——继承与派生

    1.类的继承与派生  保持已有类的特性而构造新类的过程成为继承: 在已有类的基础上新增自己的特性而产生新类的过程称为派生: 被继承的已有类为基类:派生出的新类成为派生类.继承和派生其实是一回事. 继承 ...

  8. Java-杨辉三角(YangHuiTriangle)

    杨辉三角,是二项式系数在三角形中的一种几何排列. 杨辉三角概述 ☃ 每行端点与结尾的数为1 ☃ 每个数等于它上方两数之和 ☃ 每行数字左右对称,由1开始逐渐变大 ☃ 第n行的数字有n项 ☃ 前n行共[ ...

  9. css给span加float:right右浮动后内容换行下移

    转自:https://www.jb51.net/css/67309.html 在div css布局中 当span标签右浮动时会产生换行狭义的现象 <!DOCTYPE html PUBLIC &q ...

  10. 164.扩展User模型-继承AbstractUser

    继承自AbstractUser: 如果Abstractuser中定义的字段不能够满足你的项目的要求,并且不想要修改原来User对象上的一些字段,只是想要增加一些字段,那么这时候可以直接继承自djang ...