题意:一个二进制的数,如果0的个数大于1的个数,那么我们称这个数为Round Numbers,求给定区间(十进制表示)中Round Numbers的个数

题解:数位dp,不过这里枚举的时候lead标记就有作用了(前导零,也是为了防止状态的冲突)

ac代码:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
int dp[][];
int a[];
int dfs(int pos,int num,bool lead,bool limit)// num 0比1多的个数
{
if(pos==-) return num>=;// hash一下 数组的index不能为负数
if(!lead && !limit && dp[pos][num]!=-) return dp[pos][num];
// 可以有一步减枝
int up=limit ? a[pos]:;
int ans=;
for(int i=;i<=up;i++)
{
if(i==) ans+=dfs(pos-,num-,lead && i==,limit && i==a[pos]);
else
{
if(lead) ans+=dfs(pos-,num,lead,limit && i==a[pos]);
else ans+=dfs(pos-,num+,lead && i==,limit && i==a[pos]);
}
}
if( !lead && !limit) dp[pos][num]=ans;
return ans;
}
int solve(int x)
{
int pos=;
while(x)
{
a[pos++]=x%;
x/=;
}
return dfs(pos-,,true,true);
}
int main()
{
int x,y;
memset(dp,-,sizeof(dp));
while(cin>>x>>y)
{
cout<<solve(y)-solve(x-)<<endl;
}
return ;
}

Limit 以及 lead 两个参数都是为了花费较小的代码来使状态不冲突的方式

最新文章

  1. 高效而稳定的企业级.NET Office 组件Spire(.NET组件介绍之二)
  2. 第二章 Rest框架 Nancy
  3. Generate input file for OVITO
  4. [WPF系列]-高级部分 需要区分的东东
  5. ANDROID学习之路 转
  6. MongoDB-JAVA-Driver 3.2版本常用代码全整理(4) - 地理空间索引
  7. 034. asp.netWeb用户控件之三通过用户控件实现用户注册和登录
  8. C#对 Dictionary进行排序 转
  9. xcode5 和code6中push后方法执行的先后问题
  10. [transferred] javascript exception handling.
  11. Memcached常用命令及使用说明(转)
  12. C#之装箱与拆箱
  13. collection系列用法-deque双向队列
  14. MFC基础类源码CPP实现文件
  15. C++ Primer 学习笔记_60_重载操作符与转换 --赋值、下标、成员訪问操作符
  16. Socket的粘包处理
  17. 六、BeautifulSoup4------自动登录网站(手动版)
  18. @RequestParam、@RequestBody和@ModelAttribute区别
  19. thinkphp ckeditor与ckfinder
  20. 如何做活动页面的滚动动画?让用户体验MAX的demo在这里!

热门文章

  1. 模型稳定性指标—PSI
  2. CMU Database Systems - Storage and BufferPool
  3. GIS地理工具案例教程——批量去除多边形的重叠部分
  4. git之删除untrack files
  5. Windows系统CPU和内存状态实时查询(Java)
  6. AndoridSQLite数据库开发基础教程(7)
  7. PHP 输出日志到文件 DEMO
  8. System.Net.FtpWebRequest.cs
  9. Information:java: Multiple encodings set for module chunk platf &quot;GBK&quot; will be used by compile
  10. Influxdb修改数据保留策略