大型补档计划

题目链接

设 \(f[i][j]\) 表示二进制下,数字有 \(i\) 位, \(0\) 的个数 - \(1\) 的个数 \(=\) \(j\) 的方案数

\(f[0][0] = 1;\)

填一个 \(0\)

\(f[i + 1][j + 1] += f[i][j]\)

填一个 \(1\)

\(f[i + 1][j - 1] += f[i][j]\)

考虑到负下标越界,需要加偏移量

然后数位 dp 的细节蛮多的,比如第一位如果选 0 的话得特判,因为dp包括了前导0在内加入计算,所以得额外处理一个 \(g[i]\) 表示一共 $ <= i$ 位,符合条件的个数。

#include <cstdio>
#include <iostream>
using namespace std;
const int N = 31, D = 30;
int a, b, d[N];
int f[N][N << 1], g[N];
void init() {
f[0][D] = 1;
for (int i = 0; i + 1 < N; i++) {
for (int j = 0; j <= D * 2; j++) {
if (!f[i][j]) continue;
if (j < D * 2) f[i + 1][j + 1] += f[i][j];
if (j) f[i + 1][j - 1] += f[i][j];
}
} g[0] = g[1] = 1;
for (int i = 2; i < N; i++) {
g[i] = g[i - 1];
for (int j = D + 1; j <= D * 2; j++) g[i] += f[i - 1][j];
}
} int solve(int x) {
if (x == 0) return 1;
int n;
for (int i = N - 1; ~i; i--)
if (x >> i & 1) { n = i; break; }
for (int i = 0; i <= n; i++) d[i] = x >> i & 1;
int p = 0, res = 0;
// p:目前 0 的个数 - 1 的个数
for (int i = n; ~i; i--) {
// 有 i + 1 位
if (d[i]) {
if (i == n) res += g[i];
else for (int j = D - (p + 1); j <= D * 2; j++) res += f[i][j];
p--;
} else p++;
if (i == 0 && p >= 0) res++;
}
return res;
}
int main() {
init();
scanf("%d%d", &a, &b);
printf("%d\n", solve(b) - solve(a - 1));
}

AcWing 339 .圆形数字的更多相关文章

  1. AcWing 842. 排列数字

    深搜的一道水题 https://www.acwing.com/problem/content/844/   正确输入输出 #include<bits/stdc++.h> using nam ...

  2. BadgeView 圆形数字提醒 购物车常用

    实际上BadgeView这个类就是继承TextView的.很多TextView中设置字体的方法都适用于BadgeView. 1. setTargetView(View) --> 设置哪个控件显示 ...

  3. javascript 通过面向对象编写圆形数字时钟

    效果如图所示,代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  4. 剑指 Offer

    3.1 找出数组中重复的数 来源:AcWing 题目描述 给定一个长度为 n 的整数数组 nums,数组中所有的数字都在 0∼n−1 的范围内. 数组中某些数字是重复的,但不知道有几个数字重复了,也不 ...

  5. $2019$ 暑期刷题记录1:(算法竞赛DP练习)

    $ 2019 $ 暑期刷题记录: $ POJ~1952~~BUY~LOW, BUY~LOWER: $ (复杂度优化) 题目大意:统计可重序列中最长上升子序列的方案数. 题目很直接的说明了所求为 $ L ...

  6. 《挑战程序设计竞赛》——DFS

    DFS(深度优先搜索) 简介 深度优先搜索(DFS,Depth-First Search)是搜索的手段之一.它从某个状态开始,不断的转移状态直到无法转移.然后退回到前一步的状态,继续转移到其他状态,如 ...

  7. HTML5效果:Canvas 实现圆形进度条并显示数字百分比

    实现效果 1.首先创建html代码 <canvas id="canvas" width="500" height="500" styl ...

  8. AcWing 13. 找出数组中重复的数字

    习题地址 https://www.acwing.com/solution/acwing/content/2919/. 题目描述给定一个长度为 n 的整数数组 nums,数组中所有的数字都在 0∼n−1 ...

  9. Acwing 14. 不修改数组找出重复的数字

    题目地址  https://www.acwing.com/problem/content/description/15/ 来源:剑指Offer 给定一个长度为 n+1n+1 的数组nums,数组中所有 ...

随机推荐

  1. tcp 客户端 发送syn

    简介 sys_connect->inet_stream_connect->inet_stream_connect->tcp_v4_connect->tcp_connect对于t ...

  2. appium -- Xpath定位元素

    如文章<Appium基于安卓的各种FindElement的控件定位方法实践>所述,Appium拥有众多获取控件的方法.其中一种就是根据控件所在页面的XPATH来定位控件. 本文就是尝试通过 ...

  3. classmethod、staticclassmethod内置装饰器函数

    # method 英文是方法的意思 # classmethod 类方法 # 当一个类中的方法中只涉及操作类的静态属性时,此时在逻辑上,我们想要直接通过类名就可以调用这个方法去修改类的静态属性,此时可以 ...

  4. 通过shodan搜索相同favicon.ico的网站

    0x01 根据favicon.ico生成hash python2,想改python3折腾了半天不得 import mmh3 import requests response = requests.ge ...

  5. windbg 分析cpu异常

    1.   !threadpool  查看当前CPU状况 线程数等等 2.   !runaway 查看那几个线程使用的高 建议多抓几个dump 然后确定到底是哪个线程 3.   ~线程IDs 跳转到那个 ...

  6. 如何使用ABBYY FineReader 的用户模式?

    在运用ABBYY FineReader 15(Windows系统)进行文档识别时,用户可能会遇到识别的文档包含一些特殊字符或者其他软件无法识别的字体等情况,容易造成识别出现乱码的结果.在这种情况下,用 ...

  7. 怎么用iMindMap思维导图做自我介绍

    相信大家在工作生活当中对于自我介绍这件事情都很是头疼的.太简单的介绍重点不突出,太冗长的介绍又会让人没印象.这一切都跟我们大脑水平.散乱的思维模式有关,因此想要自我介绍在众人中脱颖而出,让人印象深刻, ...

  8. 利用perspective 和 transform 里面的几个参数来实现旋转照片墙

    旋转照片墙 首先,来看下,是什么效果吧,上效果图 ↓ 其实这个东西,很容易制作,先说下思路, 把照片都给叠在一起,然后 rotateY 旋转,给每张图片 旋转不一样的角度能构成一圈, 然后transl ...

  9. C语言讲义——运算符(operator)

    运算符(operator) 算数运算符 7种 关系运算符 6种 逻辑运算符 3种 位运算符 6种 赋值运算符 11种 共5类33种 算术运算符 加 + 减 - 乘 * 除 / 取余 % (仅限于整数类 ...

  10. 大白话详解大数据HBase核心知识点,老刘真的很用心(2)

    前言:老刘目前为明年校招而努力,写文章主要是想用大白话把自己复习的大数据知识点详细解释出来,拒绝资料上的生搬硬套,做到有自己的理解! 01 HBase知识点 第6点:HRegionServer架构 为 ...