lightoj - 1032 Fast Bit Calculations (数位dp)总结
来源:互联网 发布:淘宝达人后如何直播 编辑:程序博客网 时间:2024/05/24 05:44
A bit is a binary digit, taking a logical value of either 1or0 (also referred to as "true" or "false"respectively). And every decimal number has a binary representation which isactually a series of bits. If a bit of a number is1 and its next bit isalso 1 then we can say that the number has a1 adjacent bit. Andyou have to find out how many times this scenario occurs for all numbers up toN.
Examples:
Number Binary Adjacent Bits
12 1100 1
15 1111 3
27 11011 2
Input
Input starts with an integer T (≤ 10000),denoting the number of test cases.
Each case contains an integer N (0 ≤ N < 231).
Output
For each test case, print the case number and the summationof all adjacent bits from0 to N.
Sample Input
Output for Sample Input
7
0
6
15
20
21
22
2147483647
Case 1: 0
Case 2: 2
Case 3: 12
Case 4: 13
Case 5: 13
Case 6: 14
Case 7: 16106127360
思路:dp[cur][s][last]表示到当前位置,前面有多少个11,前一位是last的,答案是多少
总结了一下:这个题跟上一个求多少个零一样,刚开始还没想明白,为什么要保存前面有多少个零,其实这个跟刚开始的求含有49的有多少个还是有区别的,因为前面的一个49算一次,而这个要求所有的11有多少个,那么前面含有11的,那么后面的肯定要再加上,因为后面有多少个不一样的数,就对应前面那个11多少次
一下解决了两个题(一类题),好开心
#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<stack>#include<map>#include<set>#include<algorithm>using namespace std;const int maxn=40;typedef long long LL;int N;int dig[maxn];LL dp[maxn][maxn][2];LL dfs(int cur,int s,int e,int last){ if(cur<0)return s; if(!e&&dp[cur][s][last]!=-1)return dp[cur][s][last]; LL ans=0; int end=(e?dig[cur]:1); for(int i=0;i<=end;i++) { if(last&&i)ans+=dfs(cur-1,s+1,e&&i==end,i); else ans+=dfs(cur-1,s,e&&i==end,i); } if(!e)dp[cur][s][last]=ans; return ans;}LL solve(int n){ int len=0; memset(dp,-1,sizeof(dp)); while(n) { dig[len++]=n%2; n/=2; } return dfs(len-1,0,1,0);}int main(){ int T,cas=1; scanf("%d",&T); while(T--) { scanf("%d",&N); printf("Case %d: %lld\n",cas++,solve(N)); } return 0;}
- lightoj - 1032 Fast Bit Calculations (数位dp)总结
- lightoj 1032 Fast Bit Calculations 数位dp
- LightOJ 1032 - Fast Bit Calculations (数位dp)
- LightOJ - 1032 Fast Bit Calculations(数位DP)
- LightOJ 1032 Fast Bit Calculations(数位DP)
- lightoj 1032 - Fast Bit Calculations 【数位dp】
- lightoj - 1032 - Fast Bit Calculations - 数位dp
- LightOJ 1032 Fast Bit Calculations(数位DP)
- lightoj 1032 - Fast Bit Calculations (数位DP)
- LightOJ 1032 - Fast Bit Calculations (数位dp)
- lightoj 1032 Fast Bit Calculations(数位dp)
- LightOJ 1032 - Fast Bit Calculations(dp)
- lightoj 1032 - Fast Bit Calculations 二进制数位dp
- 1032 - Fast Bit Calculations 数位dp
- Light oj 1032 - Fast Bit Calculations(数位dp)
- Light OJ 1032 Fast Bit Calculations(数位DP)
- LightOJ 1032 Fast Bit Calculations
- lightoj 1032 - Fast Bit Calculations
- 如何正确的使用SharedPreferences?
- matlab中size()函数的用法
- Linux解压缩命令大全
- 有关国内的流氓软件和强制安装软件(网站黑名单一览表)
- 画数组的直方图
- lightoj - 1032 Fast Bit Calculations (数位dp)总结
- C# 中的委托和事件
- 上传项目报错:Launchscreen。。。。。的解决方案
- poj 1852 Ants
- 循序渐进开发WinForm项目(1) --数据库设计和项目框架的生成
- 开源点评:ZeroMQ简介
- 【swift_0】认识swift和创建一个swift工程
- 用CSS实现LOADING省略号动画
- 特征学习“Building High-level Features Using Large Scale Unsupervised Learning”