1.8、数位DP(算法提高课)

一、数字游戏

题目链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1588

题意:求给定区间【a,b】中的不降数的个数,不降数的定义为从左到右各位数字成小于等于的关系。

思路:首先预处理出来 f[i][j] 为一共有i位,且最高位为j的数的个数,然后用数位dp求解即可,具体看代码

代码:

#include <bits/stdc++.h>using namespace std;typedef long long ll;
typedef pair<int, int> pii;const int N = 15;int f[N][N];//f[i][j]表示一共有i位,且最高位填j的数的个数void init(){for(int i=0;i<=9;i++)f[1][i]=1;for(int i=2;i<N;i++){for(int j=0;j<=9;j++){for(int k=j;k<=9;k++){f[i][j]+=f[i-1][k];}}}
}
int dp(int n){if(!n)return 1;//特判n为0的情况vector<int>v;while(n)v.push_back(n%10),n/=10;//把n的每一位分解出来int res=0,last=0;//res记录答案个数,last记录上一位的值for(int i=v.size()-1;i>=0;i--){int x=v[i];for(int j=last;j<x;j++)res+=f[i+1][j];//尝试遍历将该位填last~x-1的数能得到的数的个数if(x<last)break;last=x;if(!i)res++;//说明走到最后了,还有一个合法解}return res;
}
int main()
{init();int l,r;while(cin>>l>>r)cout<<dp(r)-dp(l-1)<<"\n";//前缀和的思想return 0;
}

二、windy 数

题目链接:https://www.luogu.com.cn/problem/P2657

题意:不含前导零且相邻两个数字之差至少为 2 的正整数被称为 windy 数。windy 想知道,在 ab 之间,包括 ab ,总共有多少个 windy 数?

思路:与上一题基本一样,具体看代码

#include <bits/stdc++.h>using namespace std;typedef long long ll;
typedef pair<int, int> pii;const int N = 15;int f[N][10];//f[i][j]表示一共有i位,且最高位填j的数的个数void init(){for(int i=0;i<=9;i++)f[1][i]=1;for(int i=2;i<N;i++){for(int j=0;j<=9;j++){for(int k=0;k<=9;k++){if(abs(j-k)>=2)f[i][j]+=f[i-1][k];}}}
}
int dp(int n){if(!n)return 0;//特判n为0的情况vector<int>v;while(n)v.push_back(n%10),n/=10;//把n的每一位分解出来int res=0,last=-2;//res记录答案个数,last记录上一位的值for(int i=v.size()-1;i>=0;i--){int x=v[i];//注意判断不能有前导0,所以如果是第一位的话要从1开始遍历,否则从0开始遍历for(int j=(i==v.size()-1);j<x;j++){//尝试遍历将该位填last~x-1的数能得到的数的个数if(abs(j-last)>=2)res+=f[i+1][j];}if(abs(x-last)>=2)last=x;else break;if(!i)res++;//说明走到最后了,还有一个合法解}//特殊处理有前导0的数for(int i=1;i<v.size();i++){for(int j=1;j<=9;j++){res+=f[i][j];}}return res;
}
int main()
{init();int l,r;cin>>l>>r;cout<<dp(r)-dp(l-1)<<"\n";//前缀和的思想return 0;
}

三、数字游戏II

题目链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1588

题意:由于科协里最近真的很流行数字游戏,某人又命名了一种取模数,这种数字必须满足各位数字之和 mod N为 0。现在大家又要玩游戏了,指定一个整数闭区间 [a,b],问这个区间内有多少个取模数。

思路:基本都是一样,根据题意改变一下预处理的数组即可

#include <bits/stdc++.h>using namespace std;typedef long long ll;
typedef pair<int, int> pii;const int N = 15 ,M=110;int P;
int f[N][10][M];//f[i][j][k]表示一共有i位,最高位为j,且i位数字的总和为k的数的个数int mod(int x,int y){return (x%y+y)%y;
}
void init(){memset(f,0,sizeof f);for(int i=0;i<=9;i++)f[1][i][i%P]++;for(int i=2;i<N;i++){for(int j=0;j<=9;j++){for(int k=0;k<P;k++){for(int x=0;x<=9;x++){f[i][j][k]+=f[i-1][x][mod(k-j,P)];}}}}
}
int dp(int n){if(!n)return 1;//特判n为0的情况vector<int>v;while(n)v.push_back(n%10),n/=10;//把n的每一位分解出来int res=0,last=0;//res记录答案个数,last记录上一位的值for(int i=v.size()-1;i>=0;i--){int x=v[i];for(int j=0;j<x;j++){res+=f[i+1][j][mod(-last,P)];}last+=x;if(!i&&last%P==0)res++;//说明走到最后了,还有一个合法解}return res;
}
int main()
{int l,r;while(cin>>l>>r>>P){init();cout<<dp(r)-dp(l-1)<<"\n";//前缀和的思想}return 0;
}

四、不要62

题目链接:https://vjudge.net/problem/HDU-2089

题意:求给定区间中的数是好数的个数,好数定义为数中没有4或者62的数。

思路:与上面一样,根据题意预处理数组即可

#include <bits/stdc++.h>using namespace std;typedef long long ll;
typedef pair<int, int> pii;const int N = 15 ,M=110;int f[N][10];//f[i][j]表示一共有i位,最高位为j满足题意得数的个数int mod(int x,int y){return (x%y+y)%y;
}
void init(){for(int i=0;i<=9;i++){if(i!=4)f[1][i]=1;}for(int i=2;i<N;i++){for(int j=0;j<=9;j++){if(j==4)continue;for(int k=0;k<=9;k++){if(k==4||j==6&&k==2)continue;f[i][j]+=f[i-1][k];}}}
}
int dp(int n){if(!n)return 1;//特判n为0的情况vector<int>v;while(n)v.push_back(n%10),n/=10;//把n的每一位分解出来int res=0,last=0;//res记录答案个数,last记录上一位的值for(int i=v.size()-1;i>=0;i--){int x=v[i];for(int j=0;j<x;j++){if(j==4)continue;if(last==6&&j==2)continue;res+=f[i+1][j];}if(x==4||last==6&&x==2)break;last=x;if(!i)res++;}return res;
}
int main()
{init();int l,r;while(cin>>l>>r,l||r)cout<<dp(r)-dp(l-1)<<"\n";return 0;
}

五、恨7不成妻(待补)

题目链接:吉哥系列故事——恨7不成妻 - HDU 4507 - Virtual Judge (vjudge.net)

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

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

相关文章

pytorch环境配置踩坑记录

一、问题1 1.执行命令 conda create -n pytorch python3.62.报错如下 Solving environment: failedCondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/msys2/noarch/repodata.json.bz2> Elapsed: -An HTTP error occurred when tr…

Java 变得越来越像 Rust?

随着编程技术的增强和复杂性的提升&#xff0c;许多编程语言也纷纷效仿&#xff0c;Java 也不例外。 另一边&#xff0c;尽管社区内部问题重重&#xff0c;但 Rust 仍逐年获得开发人员的喜爱。这背后都是有原因的&#xff1a;Rust 的编译器让开发人员避免了各种问题。编译器对…

【GlobalMapper精品教程】074:从Lidar点云创建3D地形模型

本文基于地形点云数据,基于泊松方法、贪婪三角形测量方法和阿尔法形状创建3d地形模型。 文章目录 一、加载地形点云数据二、创建三维地形模型1. 泊松方法2. 贪婪三角形测量方法3. 阿尔法形状注意事项一、加载地形点云数据 加载配套案例数据包中的data074.rar中的地形点云数据…

3D地图大屏 附源码(Three.js + Vue3)

目录 &#x1f44b; 前言 &#x1f680; 项目包 ⚒️ 字体制作 &#x1f310; 地图制作 &#x1f4a1; 参考视频 & 项目 开源项目&#xff08;Vue3tsWindcssEchartThree.js大屏案例&#xff09; 开源&#xff08;教程&#xff09; UI风格学习&#xff08; www.shuzixs.com …

本地事务存在的问题

在微服务中&#xff0c;如果还是使用本地事务会出现问题 比如订单服务中先下订单再调用库存服务再调用用户服务增加积分&#xff0c;这时候如果调用库存服务出现假失败&#xff0c;也就是说实际上成功了&#xff0c;但是因为网络原因没有返回&#xff0c;没返回出错了&#xff…

java调用讯飞星火认知模型

前往讯飞开发平台选择产品&#xff0c;获取appId、apiKey、APISecret&#xff0c;这里我选择的是v3.0模型。 java后端实现 本项目以及实现了基本的会话功能&#xff0c;小伙伴可以自己扩充其他的例如绘画功能。 注意&#xff1a;星火模型的api使用的是websocket协议&#xf…

c 多文件编程

1.结构目录 声明类:用于声明方法,方便方法管理和调用&#xff1b; 实现类:用于实现声明的方法; 应用层:调用方法使用 写过java代码的兄弟们可以这么理解&#xff1a; 声明类 为service层 实现类 为serviceimpl层 应用层 为conlloter层 2.Dome 把函数声明放在头文件xxx.h中&…

vtk.vtkAssembly()用法解释

vtk.vtkAssembly 是 VTK库中的一个重要类&#xff0c;允许通过将多个vtkActor对象组合在一起来创建复杂的3D模型。每个 vtk.vtkAssembly 对象都可以包含其他 vtk.vtkAssembly 对象&#xff0c;构成一个层级的组合结构。 以下是创建并使用 vtk.vtkAssembly 的一个基本示例&…

与上级意见不合时如何恰当地表达自己的观点?

在工作中与上级意见不合时&#xff0c;恰当表达自己的观点并寻求共识是一个需要谨慎处理的问题。以下是一些建议&#xff1a; 1. **尊重与礼貌**&#xff1a;在任何情况下&#xff0c;都应保持对上级的尊重和礼貌。即使在意见不合时&#xff0c;也要避免情绪化&#xff0c;保持…

200页图解国标《数据分类分级规则》正式稿,强化重要数据识别

GB/T 43697-2024《数据安全技术 数据分类分级规则》正式稿发布&#xff0c;并于2024年10月1日实施。2024年4月17日&#xff0c;国家标准全文公开系统公布了国标最终版。《数据分类分级规则》是全国网安标委更名后&#xff0c;发布的第一部以“数据安全技术”命名的国家标准&…

Python-VBA函数之旅-enumerate函数

目录 1、enumerate函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、相关文章&#xff1a; 个人主页&#xff1a;非风V非雨-CSDN博客 enumerate函数在Python中是一个强大的内置函数&#xff0c;用于将一个可迭代对象转换为一个索引序列&#xff0c;同时返…

java-spring 图灵 04 doscan

01.本次的重点依旧是扫描函数&#xff0c;这次是spring中的源码&#xff1a; 02.第一步&#xff0c;构造AnnotationConfigApplicationContext 主方法&#xff1a; public static void main(String[] args) {// 创建一个Spring容器AnnotationConfigApplicationContext applica…

基于react native的android原生微信客服,微信支付以及判断是否安装微信

基于react native的android原生微信客服&#xff0c;微信支付以及判断是否安装微信 引入SDK&#xff08;Android Studio 环境下&#xff09;创建wxapi/WXPayEntryActivity.java&#xff08;用于接收微信响应返回信息&#xff09;CustomerServiceModule.javaCustomerServicePack…

C#基础|Debug程序调试学习和技巧总结

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 在程序的开发过程中&#xff0c;可能绝大部分时间是用来调试程序&#xff0c; 当完成了某个功能的编程&#xff0c;都需要调试一下程序&#xff0c;看编程是否存在问题。 01 为什么需要程序调试 无论是电气工程师还…

深入探究图像增强(C语言实现)

我们将从基础出发使用C语言进行图像处理与分析&#xff0c;重点讨论图像增强和平滑技术。图像增强技术旨在通过增加对比度、亮度和整体清晰度来改善图像的视觉质量。另一方面&#xff0c;图像平滑方法则用于减少噪声并减少图像中的突变&#xff0c;使图像更加均匀和视觉上吸引人…

2024新版淘宝客PHP网站源码

源码介绍 2024超好看的淘客PHP网站源码&#xff0c;可以做优惠券网站&#xff0c;上传服务器&#xff0c;访问首页进行安装 安装好了之后就可以使用了&#xff0c;将里面的信息配置成自己的就行 喜欢的朋友们拿去使用把 效果截图 源码下载 2024新版淘宝客网站源码

【QT进阶】Qt Web混合编程之实现ECharts数据交互动态修改

往期回顾&#xff1a; 【QT进阶】Qt Web混合编程之CMake VS2019编译并使用QCefView&#xff08;图文并茂超详细版本&#xff09;-CSDN博客【QT进阶】Qt Web混合编程之html、 js的简单交互-CSDN博客【QT进阶】Qt Web混合编程之使用ECharts显示各类折线图等-CSDN博客 【QT进阶】Q…

高精度算法(1)

前言 今天来讲一讲高精度算法&#xff0c;我们说一个数据类型&#xff0c;有它的对应范围比如int类型最多 可以包含到负2的31次方到2的31次方减一 其实大概就是20亿左右那么其他的类型也同样如此 那么&#xff0c;如何解决一个很大很大的数的运算呢&#xff1f; 我们今天介…

OSPF综合大实验

1、R4为ISP&#xff0c;其上只配置IP地址&#xff1b;R4与其他所直连设备间均使用公有IP&#xff1b; 2、R3-R5、R6、R7为MGRE环境&#xff0c;R3为中心站点&#xff1b; 3、整个OSPF环境IP基于172.16.0.0/16划分&#xff1b;除了R12有两个环回&#xff0c;其他路由器均有一个环…

局域网管理软件,适合在局域网内的管理软件有哪些?

信息技术的不断发展&#xff0c;局域网在企业、学校等机构中得到了广泛应用。 局域网不仅能够提高数据传输效率&#xff0c;还能实现资源共享和协同工作。 为了更好地管理和维护局域网&#xff0c;需要使用一些专业的局域网管理软件。 一、局域网的应用范围 局域网&#xff…