dp之数位dp---(度的数量)

news2025/7/19 6:21:34

题目:

在这里插入图片描述

思路:
首先对题目意思进行分析:恰好等于 K 个互不相等的 B 的整数次幂之和,这句话的意思是说对于某一个B进制数x说,x只有k位上只有1,其他位为0。然后让你求区间[X,Y]的满足条件的数字有多少,这里我们可以用区间[1,Y]-[1,X-1]来更加容易的得到答案。

那么我们怎么获得前n个数的满足条件的数呢,首先将B进制数x中的 每一位用a表示为anan-1an-2an-3…a0,然后从第一位an开始,把它分为两部分0-an-1和an,所有的决策都可以由第一部分和第二部分的和组成(图片画横线的部分)。

当我们选第一部分0-an-1的时候,那么第an-1位以及以后的数字我们可以任意选取,(不会超过x),但是因为题目要求只能选0或者1那么先取0的话就是n个数(因为最后一个数的下标为a0)中选出k-last(当前已经选了多少个1)个1的结果,如果取1的话那么就是n个数中选出k-last个1的结果,这部分结果可以用组合数来求得(根据组合数公式C(a,b)=C(a-1,b)+C(a-1,b-1)来获得),但是取1有个前提条件,那么就是an必须大于1(因为如果an等于1的话,那么他是会分到第二部分的)。

这样第一部分就选完了,那么对于第二部分an的时候,如果an不为1,那么根据题意不能选择除了0或者1之外的任意数字,那么直接break退出即可;否则如果为1,那么last就要++(接下来需要的1少一个),然后继续往下走每次计算左边的决策,然后走到最后一位的时候a0如果选0,那么就可以根据判断条件[last=k]是否成立,如果成立结果res++即可;如果选1,那么也会last++,然后因为走到了最后一位,后面没有可以再进行的决策,那么还是根据[last=k]是否成立来使res++。
在这里插入图片描述
大体思路就是这样子的,具体细节可以看看代码:

/**
*  ┏┓   ┏┓+ +
* ┏┛┻━━━┛┻┓ + +
* ┃       ┃
* ┃   ━   ┃ ++ + + +
*  ████━████+
*  ◥██◤ ◥██◤ +
* ┃   ┻   ┃
* ┃       ┃ + +
* ┗━┓   ┏━┛
*   ┃   ┃ + + + +Code is far away from  
*   ┃   ┃ + bug with the animal protecting
*   ┃    ┗━━━┓ 神兽保佑,代码无bug 
*   ┃  	    ┣┓
*    ┃        ┏┛
*     ┗┓┓┏━┳┓┏┛ + + + +
*    ┃┫┫ ┃┫┫
*    ┗┻┛ ┗┻┛+ + + +
*/

#include<cstdio>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <string>
#include <math.h>
#include<vector>
#include<queue>
#include<map>
#define sc_int(x) scanf("%d", &x)
#define sc_ll(x) scanf("%lld", &x)
#define pr_ll(x) printf("%lld", x)
#define pr_ll_n(x) printf("%lld\n", x)
#define pr_int_n(x) printf("%d\n", x)
#define ll long long 
using namespace std;

const int N=1000000+100;
int x,y,k,b;
int s[40][40];//因为如果是二进制位可能会有30位多开了点

void cal()//用于计算组合数 
{
	for(int i =0;i<=40;i++)
		for(int j =0;j<=i;j++)
		if(j==0)s[i][j]=1;//i个数中不选也有一种方案
		else s[i][j]=s[i-1][j]+s[i-1][j-1];
}

int dp(int n)
{
	if(n==0)return 0;//特判,0的时候没有任何一种方案

	vector<int>cnt;//用来存储进制转换后的数

	while(n)cnt.push_back(n%b),n/=b;

	int res=0;//结果
	int last=0;//到当前情况已经选了多少个1

	for(int i =cnt.size()-1;i>=0;i--)//从最高位开始运算
	{
		int x=cnt[i];
		if(x)//如果x大于等于1
		{
			res+=s[i][k-last];//i个数中选k-last个1
			if(x>1)
			{
				if(k-last-1>=0) res+=s[i][k-last-1];//选1的情况就少了一个1可以选择,
				//到此左半部分计算完毕
				break;//因为x大于1的时候右半部分不能得到1,直接退出即可
			}
			else{//x为1 的情况
				last++;//已经选了的1增加
				if(last>k)break;//如果已经选了1的数量大于k那么也可以直接退出
			}
		}
		if(i==0&&k==last)res++;//走到了a0的情况判断一下是否可以构成一种方案
	} 
	return res;
}

int main()
{
	cal();
	cin>>x>>y>>k>>b;
	cout<<dp(y)-dp(x-1)<<endl;

	return 0;
}

看y总的大概思路就是把这些数按树形结构分成两部分考虑,每一部分的答案根据上一部分获得,反正自己也不是很会,只能尽量写了那么清楚了qwq

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/395629.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatis开发详解

MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff08;Plain Old Java Objects&am…

信息系统基本知识(五)信息系统安全技术

大纲 信息系统与信息化信息系统开发方法常规信息系统集成技术软件工程新一代信息技术信息系统安全技术信息化发展与应用信息系统服务管理信息系统服务规划企业首席信息管及其责任 1.6 信息系统安全技术 1.6.1 信息系统安全的有关概念 信息安全的概念&#xff1a;信息安全强…

机器人向生产力系统迈进,优艾智合稳步“从1到100”

在中国&#xff0c;机器人的“成长”总是令人惊讶。这些“钢铁生命”和“芯片生命”&#xff0c;在工厂流水线、物流仓储园区、机房电站飞速复制&#xff0c;充当产业的手、眼和大脑。国际机器人联合会IFR的数据显示&#xff0c;2020-2024年&#xff0c;中国机器人市场规模CAGR…

源码解析——HashMap

源码解析——HashMap1. 什么 是HashMap2. 为什么要使用HashMap3. HashMap的使用4. 源码解析4.1 关键问题4.1 存储结构4.2 HashMap 的容量和负载因子4.3 初始化过程4.3 put() 方法实现原理4.3.1 hash()4.3.2 resize()4.4 get() 方法实现原理5. 面试题总结6. ConcurrentHashmap(J…

【办公类-16-06】“2022下学期 总园活动室(沙水+建构)排班表”(python 排班表系列)

背景需求&#xff1a;最近保教主任一直在为总园的活动室安排而头疼不已&#xff0c;和组长们商议许久&#xff0c;依旧无法合理把活动室安排好。3月2日下午&#xff0c;听主任和游戏室成员聊了一个小时的排班&#xff0c;结论是除沙水和建构外&#xff0c;其余空余时间都是”自…

【RGB3DS道路检测车智慧运维解决方案】助力城市道路运维数字化转型

随着数字城市建设的全面推进&#xff0c;交通运维数字化转型也逐步进入新的层次。道路表观病害检测作为养护运维的基础和关键环节&#xff0c;亟待投入更多关注。 针对国家对交通运维数字化转型的相关要求与及时有效评估路面健康情况的需求&#xff0c;博雅弘拓科技力推【RGB3…

互联网大厂效率到底有多高?且看大腕怎么说

互联网公司的效率到底有多高&#xff1f; 看抖音创始人张一鸣怎么说 趣讲大白话&#xff1a;组织能力是关键 【趣讲信息科技96期】 ******************************* 对组织而言需要把优秀的标准清晰无误的传递且不断精进。含糊和混淆其实是牺牲。——抖音创始人张一鸣。 把信…

面向对象设计模式:结构型模式之适配器模式

一、引入 Object Oriented Adapters 二、XX 模式 aka&#xff1a;Wrapper (包装器) 2.1 Intent 意图 Convert the interface of a class into another interface clients expect. 将一个类的接口转换成客户希望的另外一个接口. 作为两个不兼容的接口之间的桥梁 适配器模式使…

Leetcode.1359 有效的快递序列数目

题目链接 Leetcode.1359 有效的快递序列数目 Rating &#xff1a; 1723 题目描述 给你 n笔订单&#xff0c;每笔订单都需要快递服务。 请你统计所有有效的 收件/配送 序列的数目&#xff0c;确保第 i 个物品的配送服务 delivery(i)总是在其收件服务 pickup(i)之后。 由于答案…

Locally Differentially Private Protocols for Frequency Estimation论文笔记

文章目录1.Pure LDP Protocol1.1相关背景1.2支持集1.3相关定义2.Basic one-time RAPPOR3.Rappor4.Direct Encoding4.1GRR4.2RR5.Unary Encoding5.1Symmetric Unary Encoding5.1Optimized Unary Encoding6.Local Hashing6.1Binary Local Hashing6.2Local Hashing6.3Optimal Loca…

Java后端实现Excel导入和导出

文章目录前言1.1准备1.2 Excel导入1.2.1 解析为JSON1.2.2 解析为对象&#xff08;基础&#xff09;1.2.3 解析为对象&#xff08;字段自动映射&#xff09;1.2.4 解析为对象&#xff08;获取行号&#xff09;1.2.5 解析为对象&#xff08;获取原始数据&#xff09;1.2.6 解析为…

JavaScript 条件语句 If ... Else实例集合

文章目录JavaScript 条件语句 If ... Else实例集合If 语句If...else 语句随机链接Switch 语句JavaScript 条件语句 If … Else实例集合 If 语句 源码 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>梁辰兴实例</t…

stack_queue

目录&#xff1a;stack的介绍stack的使用stack的模拟实现queue的介绍queue的使用queue的模拟实现容器适配器是什么priority_queue的介绍priority_queue的使用priority_queue的模拟实现为什么要引“#include<functional>”头文件&#xff1f;回调函数仿函数stack的介绍 s…

无线蓝牙耳机佩戴舒适的有哪几款?入耳舒适的蓝牙耳机推荐

耳机已经成了现代年轻人不可缺少的东西&#xff0c;选择一款佩戴舒适的蓝牙耳机&#xff0c;使人幸福感爆棚&#xff0c;并且还能感受导音质出色声音表现力&#xff0c;下面整理了几款入耳舒适的耳机。 一、南卡小音舱蓝牙耳机 单耳重量&#xff1a;3.1g 佩戴类型&#xff1a…

FISCO BCOS(二十八)———使用java SDK与区块链交互

一、基本环境准备 1、部署配置jdk1.8 https://blog.csdn.net/weixin_46457946/article/details/1232435132、搭建单群组FISCO BCOS联盟链 https://blog.csdn.net/weixin_46457946/article/details/1225463343、配置及使用控制台 https://blog.csdn.net/weixin_46457946/art…

Vue2的基本使用

一、vue的基本使用 第一步 引入vue.js文件 <script src"https://cdn.staticfile.org/vue/2.7.0/vue.min.js"></script> 或者<script src"./js/vue.js"></script> 第二步 在body中设置一个挂载点 {{msg}} <div id"app…

Web3中的营销:如何在2023年获得优势

Mar. 2022, Daniel在过去的一年里&#xff0c;让人们对你的Web3项目或协议感兴趣已经变得越来越有挑战性。许多曾经充满希望的项目因为各种不同的原因&#xff0c;都在熊市中倒下了。然而&#xff0c;那些迄今为止幸存下来的项目都有一个共同点&#xff1a;强大的社区。Web3营销…

九龙证券“风光储锂芯”集体回暖 创业板指探低回升

周一&#xff0c;A股三大指数体现分解&#xff0c;沪指微跌&#xff0c;创业板指探低上升小幅上涨。盘面上&#xff0c;“风景储锂芯”集体反弹&#xff0c;6G概念再度大涨&#xff0c;消费股午后逆势走强&#xff0c;酒店旅游方向领涨&#xff0c;而前期热门的数字经济概念震动…

OpenCV实战(13)——高通滤波器及其应用

OpenCV实战&#xff08;13&#xff09;——高通滤波器以及应用0. 前言1. 检测图像边缘1.2 Sobel 滤波器1.2 梯度算子1.3 高斯导数2. 图像拉普拉斯算子2.1 拉普拉斯算子2.2 使用拉普拉斯算子增强图像的对比度2.3 高斯差3. 完整代码小结系列链接0. 前言 在频域分析中&#xff0c…

谷歌霸屏外推技术原理,谷歌留痕霸屏怎么做?

首先&#xff0c;让我解释一下谷歌霸屏外推技术原理 谷歌霸屏外推是指拥有一批网站资源&#xff0c;这些网站旨在通过搜索引擎优化技术提高排名&#xff0c;并将流量引导到主要网站。 这些网站通常具有相似的设计和内容&#xff0c;但使用不同的域名和IP地址。 如果您想通过…