HDU 5787 wolf Number 数位dp

题意

题目就是说让我们在l到r的数字中求得有多少个连续k为不相同的数
1≤L≤R≤1e18
2≤K≤5
Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)

分析

直接枚举必然超时 考虑数位dp
由于k最大到5 所以我们可以记录前四位的大小 通过一个check函数去判断是否存在相同的数
也就是说 状态转移发生在前四位对应的数字大小的情况下
我们开一个dp[pos][p1][p2][p3][p4]记录在pos下前四位分别是p1,p2,p3,p4的符合条件的数的个数
然后每次搞完后记录下来(没有限制) 我们的dp数组中只记录没有限制的数 如果有限制就不记录只是求和
如何判断前四位是否与本位相同 我们可以把前导0用10表示 如果前面的位数是10表示前面的数是0

code

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll ans,l,r,k,dp[20][11][11][11][11],d[20],dig;
bool check(int p4,int p3,int p2,int p1,int x){if(k==2&&p1!=10)return x!=p1;else if(k==3)return (x!=p1&&x!=p2);else if(k==4)return (x!=p1&&x!=p2&&x!=p3);else return (x!=p1&&x!=p2&&x!=p3&&x!=p4);
}
ll DP(int pos,int p4,int p3,int p2,int p1,bool limit){if(pos==0){return p1!=10;}//3 这里的意义在于如果这个数是个0 就不记录他//每次走到了pos==0的时候  因为走到这里的数 只可能是1个确切的数 px都已经确定if(!limit&&~dp[pos][p4][p3][p2][p1])return dp[pos][p4][p3][p2][p1];//如果没有限制 且已经记录过 直接返回结果int up = limit?d[pos]:9;//确认上界ll a=0;for(int i=0;i<=up;i++){//pos位置下 从小到大数位枚举 把每一位下的分结果计算出来if(p1==10&&i==0)//前导零情况a+=DP(pos-1,10,10,10,10,limit&&i==up);//2 根据条件变化 如果前面是前导0并且本位也是0 那么传递下去的就是limit并且是否到达上界 两个条件决定 因为 如果前面没有限制 i没到达上界 可以把下一位的递归上界设为9的else if(check(p4,p3,p2,p1,i))a+=DP(pos-1,p3,p2,p1,i,limit&&i==up);//每当我前面有限制和当前位是记录位大小时限制传递}if(!limit)dp[pos][p4][p3][p2][p1]=a;//1每当把一种p组合的数遍历结束后 就把他们记录下来return a;
}
ll solve(ll x)
{dig=0;while(x){d[++dig]=x%10;x/=10;}return DP(dig,10,10,10,10,1);//传入时需要有限制 由于不能让最高位的up到9 需要到d[pos]
}
int main()
{while(~scanf("%lld%lld%lld",&l,&r,&k)){memset(dp,-1,sizeof(dp));printf("%lld\n",solve(r)-solve(l-1));}return 0;
}

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

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

相关文章

【发现问题】IDEA设置全局新创建文件默认换行符

今晚读《阿里Java开发手册》的代码格式部分中&#xff0c;第十条强制规约引起了我的注意。说的是&#xff0c; IDE中文件的换行符使用UNIX格式&#xff0c;不要使用Windows格式。 于是上网搜索为何如此&#xff0c;得到以下答案&#xff1a; 在开发中&#xff0c;有可能会遇到某…

图像文件类型

图像的分类 按照图像的动态特性&#xff1a; •静止图像和运动图像 按照图像的色彩&#xff1a; •灰度图像和彩色图像 按照图像的维数&#xff1a; •二维图像&#xff0c;三维图像和多维图像。 位图是通过许多像素点表示一幅图像&#xff0c;每个 像素具有颜色属性和位置…

[Leedcode][JAVA][第739题][每日温度][暴力][单调栈]

【问题描述】[中等] 根据每日 气温 列表&#xff0c;请重新生成一个列表&#xff0c;对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高&#xff0c;请在该位置用 0 来代替。例如&#xff0c;给定一个列表 temperatures [73, 74, 75, 71, 69, 7…

MySQL学习笔记2

目录MySQL函数常用函数聚合函数&#xff08;常用&#xff09;数据库级别MD5加密&#xff08;拓展&#xff09;事务什么是事务索引索引的分类测试索引索引原则权限管理和备份用户管理MySQL备份规范数据库设计三大范式MySQL函数 常用函数 -- 数学运算SELECT ABS(-8) -- 绝对值 …

数位dp 模板

板子 ?? DP(pos,状态变量...,限制布尔){if(pos0)return 1;//一般每次执行到这里时的数是要算入总结果的 不一定是1 根据题目确定if(!limit&&dp[对应状态]!-1)return dp[对应状态]; //记忆化搜索int up limit?d[pos]:9;//表示如果前面一位有限制 就说明这是擦着区间…

拓展资源

1&#xff0e;人类的视觉感知系统 眼睛中的光接收器主要是视觉细胞&#xff0c;它包括锥状体和杆状体。中央凹&#xff08;或称中心窝&#xff09;部 分特别薄&#xff0c;这部分没有杆状体&#xff0c;只密集地分布锥状体。它具有辨别光波波长的能力&#xff0c;因此&#xff…

HTML5前端开发学习路线建议,学习前端的必备知识点

Web前端开发工程师是一个很新的职业&#xff0c;是从事Web前端开发工作的工程师。主要进行网站开发&#xff0c;优化&#xff0c;完善的工作。网页制作是Web 1.0时代的产物&#xff0c;那时网站的主要内容都是静态的&#xff0c;用户使用网站的行为也以浏览为主。 一位好的Web前…

[Leedcode][JAVA][第990题][等式方程的可满足性][并查集]

【问题描述】[中等] 给定一个由表示变量之间关系的字符串方程组成的数组&#xff0c;每个字符串方程 equations[i] 的长度为 4&#xff0c;并采用两种不同的形式之一&#xff1a;"ab" 或 "a!b"。在这里&#xff0c;a 和 b 是小写字母&#xff08;不一定不…

图像基本运算概述型

图像基本运算概述型 图像基本运算的概述(Introduction) 图像基本运算的分类 点运算 点运算是指对一幅图像中每个像素点的灰度值进行计算 的方法。 代数运算、逻辑运算 代数运算或逻辑运算是指将两幅或多幅图像通过对应像 素之间的加、减、乘、除运算或逻辑与、或、非运算得 到…

HDU odd-even number 数位dp

题意 在l到r区间内求有多少个符合条件“当前数中所有连续的奇数长度是偶数 所有连续的偶数长度是奇数”的个数分析 典型的数位dp问题 我们设置dp数组时可以根据 dp[pos][pre][len]设定 表示在pos长度下 前面是pre并且长度是len的个数共有多少这个方法很巧妙 根据这个结构 我…

web

1.添加tomcat 新建动态web 在WebContent下新建index.jsp Windows-->preferences-->Server-->Runtimes Environments 稍后tomcat启动成功&#xff0c;但访问tomcat首页报404 解决方法&#xff1a;将server里的项目removeAll&#xff0c;启动server&#xff0c;双击修改…

[剑指offer][JAVA]面试题第[20]题[表示数值的字符串][状态机]

【问题描述】[中等] 请实现一个函数用来判断字符串是否表示数值&#xff08;包括整数和小数&#xff09;。例如&#xff0c;字符串"100"、"5e2"、"-123"、"3.1416"、"0123"都表示数值&#xff0c;但"12e"、"…

点运算

线性点运算 线性点运算的应用 1&#xff09;如果a>1&#xff0c;输出图像的对比度增大&#xff08;灰度扩展&#xff09; 2&#xff09;如果0<a<1,输出图像的对比度减小&#xff08;灰度压缩&#xff09; 3&#xff09;如果a为负值&#xff0c;暗区域将变亮&#xff…

使用requests模块简单获取数据

一、使用ruquests的基本步骤&#xff1a; 指定url发起请求获取响应对象中的数据持久化存储1 #1 2 url https://www.sogou.com/ 3 #2. 4 response requests.get(urlurl) 5 #3. 6 page_text response.text 7 #4. 8 with open(./sogou.html,w,encodingutf-8) as fp: 9 fp.w…

代数运算

代数运算 概念 代数运算是指两幅或多幅输入图像之间进行点对点的加、 减、乘、除运算得到输出图像的过程。如果记输入图像 为A(x,y)和B(x,y)&#xff0c;输出图像为C(x,y)&#xff0c;则有如下四种形 式&#xff1a; 逻辑运算 在进行图像理解与分析领域比较有用。运用这种方法…

[剑指offer][JAVA]面试题第[21]题[调整数组顺序使奇数位于偶数面前][双指针]

【问题描述】[简单] 输入一个整数数组&#xff0c;实现一个函数来调整该数组中数字的顺序&#xff0c;使得所有奇数位于数组的前半部分&#xff0c;所有偶数位于数组的后半部分。示例&#xff1a;输入&#xff1a;nums [1,2,3,4] 输出&#xff1a;[1,3,2,4] 注&#xff1a;[…

后缀数组 魔板

为什么一开始要再字符串末尾多算个0呢 因为当开始分关键字比较的时候 最后要组成两个 字符所以要多个0 什么你有问我为什么填0 因为0小啊 先处理呗 虽然 sa是根据每个字符确定的大小 也就是排布的每个字符的排名 但是在初次求第二关键字排序的时候 可以使用sa的结论 首…

几何运算

几何运算 .概念 几何运算就是改变图像中物体对象&#xff08;像素&#xff09;之间的空 间关系。 从变换性质来分&#xff0c;几何变换可以分为图像的位置变换 &#xff08;平移、镜像、旋转&#xff09;、形状变换&#xff08;放大、缩小&#xff09;以 及图像的复等合变换…

vmware创建虚拟机并安装centos7系统

一、vmware创建虚拟机 1、添加一个全新的虚拟机 2、以典型的方式创建虚拟机&#xff0c;然后下一步 3、选择稍后安装操作系统&#xff08;这样我们等下可以自由选择操作系统&#xff09;&#xff0c;然后下一步 4、选择客户及操作系统类型及版本&#xff08;由于我这里将安装的…

MySQL学习笔记3——JDBC

目录JDBC简介数据库驱动JDBC第一个JDBC程序JDBC中各对象详解statement对象包装成工具类SQL注入问题PreparedStatement对象使用IDEA连接数据库JDBC操作事务数据库连接池DBCP需要用到的JAR包DBCP配置文件工具类测试代码C3P0需要用到的JAR包C3P0配置文件工具类测试代码结论JDBC简介…