博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ-3252 Round Numbers 按位DP
阅读量:7117 次
发布时间:2019-06-28

本文共 965 字,大约阅读时间需要 3 分钟。

前面用组合数学来写这题实在是被边界条件搞得头昏脑胀,这里就直接按位DP,每次dfs传递0和1的个数这两个参数下去即可。

代码如下:

#include 
#include
#include
using namespace std;int a, b, bit[35], dp[35][35][35];int dfs(int pos, int zero, int one, int limit){ if (pos == -1) { return zero >= one; } if (!limit && dp[pos][zero][one] != -1) { return dp[pos][zero][one]; } int sum = 0, _o, _z, end = limit ? bit[pos] : 1; for (int i = 0; i <= end; ++i) { _o = one, _z = zero; if (i == 1) _o = one + 1; else if (i == 0 && one) _z = zero + 1; sum += dfs(pos-1, _z, _o, limit && i==end); } if (!limit) dp[pos][zero][one] = sum; return sum;}int Cal(int x){ int idx = -1; while (x) { bit[++idx] = x % 2; x /= 2; } return dfs(idx, 0, 0, 1);}int main(){ memset(dp, 0xff, sizeof (dp)); while (scanf("%d %d", &a, &b) == 2) { a -= 1; printf("%d\n", Cal(b) - Cal(a)); } return 0; }

转载地址:http://gqyel.baihongyu.com/

你可能感兴趣的文章
看板,敏捷的另一种实现方式
查看>>
Mfc资源消息的响应机制
查看>>
《JAVA与模式》之策略模式
查看>>
Huffman树
查看>>
数组长度计算
查看>>
HTML和CSS的精华
查看>>
VC POST表单——登录验证新浪邮箱
查看>>
UI自动化测试元素定位思想
查看>>
【leetcode】4Sum(middle)
查看>>
06 redis中set结构及命令详解
查看>>
跟我一起数据挖掘(19)——什么是数据挖掘(2)
查看>>
HDU 1698 just a hook 线段树,区间定值,求和
查看>>
Android线程之Looper
查看>>
使用Codeblock搭建Windows下Objec-c学习环境
查看>>
Spring MVC 中 HandlerInterceptorAdapter的使用--转载
查看>>
Knockout应用开发指南 第五章:创建自定义绑定
查看>>
php 字符串截取
查看>>
VS2010 正则批量替换头文件路径
查看>>
关于git CRLF LF结尾的问题
查看>>
10、ASP.NET MVC入门到精通——Model(模型)和验证
查看>>