题目

\(\texttt{[USACO06NOV] Round Numbers S}\)

分析

数位 \(dp\) 入门题

一般我们需要当前位置 \(pos\),有无前导零 \(lead\),高位标记 \(limit\)

然后就依题弄

\(Code\)

#include<cstdio>
#include<cstring>
using namespace std; int l , r , f[40][40][40] , a[40] , len; int dfs(int pos , int s0 , int s1 , int lead , int limit)
{
if (!pos) return s0 >= s1;
if (f[pos][s0][s1] != -1 && !lead && !limit) return f[pos][s0][s1];
int res = 0;
for(register int i = 0; i <= (limit ? a[pos] : 1); i++)
{
if (!i && lead) res += dfs(pos - 1 , s0 , s1 , 1 , limit && (i == a[pos]));
else res += dfs(pos - 1 , s0 + (i == 0) , s1 + (i == 1) , 0 , limit && (i == a[pos]));
}
if (!lead && !limit) f[pos][s0][s1] = res;
return res;
} int solve(int x)
{
len = 0;
while (x) a[++len] = x & 1 , x >>= 1;
memset(f , 255 , sizeof f);
return dfs(len , 0 , 0 , 1 , 1);
} int main()
{
scanf("%d%d" , &l , &r);
printf("%d\n" , solve(r) - solve(l - 1));
}

最新文章

  1. EaeyUI
  2. Vector Calculus
  3. vim快捷键总结
  4. django 笔记
  5. hdu----(2848)Repository(trie树变形)
  6. ExtJS 5.0版本问题+Sencha cmd
  7. IPv6介绍
  8. UVA - 11020 Efficient Solutions(Multiset)
  9. 获取listboxitem在ListBox中的index并转换成abcd
  10. hdu 1298 T9
  11. hibernate 根据数据库表反生成javaBean
  12. SVN同步时忽略特定文件或文件夹
  13. 更优雅的方式: JavaScript 中顺序执行异步函数
  14. java实现:将一个数各个位数相加
  15. How To Upgrade ASMLib Kernel Driver as Part of Kernel Upgrade? (文档 ID 1391807.1)
  16. 2018-03-11 20165235祁瑛《Java程序设计》第二周学习总结
  17. python_WSGI接口
  18. word文档的python解析
  19. IP与十进制相互转化
  20. mongodb first

热门文章

  1. 解决一个mysql报错
  2. html网页图片加载失败的友好处理方式
  3. Java常用开发文档及工具
  4. SpringMVC02:返回值、json数据、文件上传、拦截器
  5. 【SQL必知必会】SQL知识查缺补漏
  6. 【Java】二分查找标准代码
  7. 分布式日志:Exceptionless的安装与部署
  8. VsCode搭建C语言运行环境以及终端乱码问题解决
  9. 【转载】MSSQL汉字首字母查询处理自定义函数
  10. APICloud平台使用融云模块实现音视频通话实践经验总结分享