SPOJ BALNUM Balanced Numbers(数位DP+状态压缩)题解
思路:
把0~9的状态用3进制表示,数据量3^10
代码:
#include<cstdio>
#include<map>
#include<set>
#include<queue>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define ll long long
const int N = 500+5;
const int INF = 0x3f3f3f3f;
using namespace std;
int dp[22][60000]; //0 没出现,1 奇数,2 偶数
int dig[22];
int check(int sta){
for(int i = 0;i <= 9;i++){
int tmp = sta % 3;
sta /= 3;
if(i % 2 == 1 && tmp == 1) return 0;
else if(i % 2 == 0 && tmp == 2) return 0;
}
return 1;
}
int news(int sta,int x){
int num[10];
for(int i = 0;i <= 9;i++){
num[i] = sta % 3;
sta /= 3;
}
int tmp = 0;
if(num[x] == 0) num[x] = 1;
else num[x] = 3 - num[x];
for(int i = 9;i >= 0;i--){
tmp = tmp*3 + num[i];
}
return tmp;
}
ll dfs(int pos,int sta,bool lead,bool limit){
if(pos == -1) return check(sta);
if(!limit && dp[pos][sta] != -1) return dp[pos][sta];
int top = limit? dig[pos] : 9;
ll ret = 0;
for(int i = 0;i <= top;i++){
int STA = news(sta,i);
if(lead && i == 0) STA = 0;
ret += dfs(pos - 1,STA,lead && i == 0,limit && i == top);
}
if(!limit) dp[pos][sta] = ret;
return ret;
}
ll solve(ll x){
int pos = 0;
if(x == 0) return 1;
while(x){
dig[pos++] = x % 10;
x /= 10;
}
return dfs(pos - 1,0,true,true);
}
int main(){
int T;
ll a,b;
scanf("%d",&T);
memset(dp,-1,sizeof(dp));
while(T--){
scanf("%lld%lld",&a,&b);
printf("%lld\n",solve(b) - solve(a - 1));
}
return 0;
}
SPOJ BALNUM Balanced Numbers(数位DP+状态压缩)题解的更多相关文章
- SPOJ BALNUM - Balanced Numbers - [数位DP][状态压缩]
题目链接:http://www.spoj.com/problems/BALNUM/en/ Time limit: 0.123s Source limit: 50000B Memory limit: 1 ...
- SPOJ10606 BALNUM - Balanced Numbers(数位DP+状压)
Balanced numbers have been used by mathematicians for centuries. A positive integer is considered a ...
- spoj 10606 Balanced Numbers 数位dp
题目链接 一个数称为平衡数, 满足他各个数位里面的数, 奇数出现偶数次, 偶数出现奇数次, 求一个范围内的平衡数个数. 用三进制压缩, 一个数没有出现用0表示, 出现奇数次用1表示, 出现偶数次用2表 ...
- hdu 4352 数位dp + 状态压缩
XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- hdu_4352_XHXJ's LIS(数位DP+状态压缩)
题目连接:hdu_4352_XHXJ's LIS 题意:这题花大篇篇幅来介绍电子科大的一个传奇学姐,最后几句话才是题意,这题意思就是给你一个LL范围内的区间,问你在这个区间内最长递增子序列长度恰为K的 ...
- SPOJ BALNUM Balanced Numbers (数位dp)
题目:http://www.spoj.com/problems/BALNUM/en/ 题意:找出区间[A, B]内所有奇数字出现次数为偶数,偶数字出现次数为计数的数的个数. 分析: 明显的数位dp题, ...
- SPOJ - BALNUM Balanced Numbers(数位dp+三进制状压)
Balanced Numbers Balanced numbers have been used by mathematicians for centuries. A positive integer ...
- SPOJ - BALNUM - Balanced Numbers(数位DP)
链接: https://vjudge.net/problem/SPOJ-BALNUM 题意: Balanced numbers have been used by mathematicians for ...
- spoj Balanced Numbers(数位dp)
一个数字是Balanced Numbers,当且仅当组成这个数字的数,奇数出现偶数次,偶数出现奇数次 一下子就相到了三进制状压,数组开小了,一直wa,都不报re, 使用记忆化搜索,dp[i][s] 表 ...
- hdu 4352 XHXJ's LIS 数位dp+状态压缩
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4352 XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others ...
随机推荐
- 百度地图API功能
984aca5bc78b070e59f34e230f11cf6d http://api.map.baidu.com/api?v=2.0&ak=您的密钥" <html> & ...
- chrom调试
2.Event Listeners 可以看到事件找到对应在标签点开里有useCapture, passive: once: handler等等右键handler 的"show functio ...
- 一致性哈希算法(consistent hashing)(转)
http://blog.csdn.net/cywosp/article/details/23397179
- 科普HTTP Slow Attack 和 Apache DOS 漏洞的修复
导读 HTTP 的 Slow Attack 有着悠久历史的 HTTP DOS 攻击方式,最早大约追溯到 5 年前,按理说早该修复了,但是 Apache 的默认配置中仍然没有添加相关配置,或者他们认为这 ...
- sqlserver 2012隐藏查询结果窗口
1, 08r2的时候都是可以用 ctrl+r隐藏的 到了2012就不行了 方法 . 2, 快捷键的设置
- X-UA-Compatible也无法解决的IE11兼容问题
3月8日接到一位用户的电话,说写博客时编辑器显示不出来.浏览器用的是披着360外衣的IE11,编辑器用的是CuteEditor. 当时电脑上没安装IE11,用IE10测试正常,心想应该是一个手到擒来的 ...
- ASM学习记录
代理: 代理模式: 静态代理: 动态代理:是指在运行期动态的为指定的类生成其代理类.(需要相关的运行时编译技术) Javassist:Javassist是一个运行时编译库,他能动态的生成或修改类的字节 ...
- php5.6 的curl开启和之前的不太一样了,搞了半天,记录下
设置电脑环境变量中的->系统变量(注:不是用户变量) 新建 PHP_HOME 值 D:\php /PHP 根目录 Path 增加 ;%PHP_HOME%;%PHP_HOME%\ext ...
- Linux 系统默认运行级别设定
#vi /etc/inittab,将 id:5:initdefault: 改为 id:3:initdefault: Linux 系统任何时候都运行在一个指定的运行级上,并且不同的运行级的程序和服务都不 ...
- atime、mtime、ctime的区别及如何降低atime更新 mount时的option noatime
atime.mtime.ctime的区别及如何降低atime更新 mount时的option noatime http://mp.weixin.qq.com/s?__biz=MzA3MzYwNjQ3 ...