首页 > 其他分享 >数位dp 不要62

数位dp 不要62

时间:2024-09-22 09:03:36浏览次数:1  
标签:cnt 15 int ll 62 dp 数位

纯纯数位dp板子,可以顺着思路下来。

传统技能学习笔记

不要62 libreoj

设状态为 \(dp[i][j]\) 为第 \(i\) 位是 \(j\) 的可能情况数。

枚举位数,这位的数,低一位的数,将每一位的组合可能存下来,但要把这位是 4 与这位是 6 低一位是 2 的情况排除掉。

void init(){
	dp[0][0]=1;
	for(int i=1;i<=8;i++){
		for(int j=0;j<=9;j++){
			if(j==4){
				continue;
			}
			for(int k=0;k<=9;k++){
				if((j==6&&k==2)){
					continue;
				}
				dp[i][j]+=dp[i-1][k];
			}
		}
	}
}

然后进行计算,将每一位存下来,循环 0-a[i]-1,因为a[i]不能直接取全部情况,注意这时要将这位是2高一位6的情况排除掉,这个可以思考思考就可以了。如果出现哪一位4和62的话直接跳出,因为后面一定就不会取到。

ll dig(int x){
	int cnt=0;
	ll sum=0;
	while(x){
		a[++cnt]=x%10;
		x/=10;
	}
	a[cnt+1]=-1;
	for(int i=cnt;i>=1;i--){
		for(int j=0;j<a[i];j++){
			if(j==2&&a[i+1]==6){
				continue;
			}
			sum+=dp[i][j];
		}
		if(a[i]==4||(a[i+1]==6&&a[i]==2)){
			break;
		}
	}
	return sum;
}

这样计算时要r+1,因为最后一位总是取不到,所以要多打个1就可以了。

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
int n,m;
ll dp[15][15];
int a[15];
void init(){
	dp[0][0]=1;
	for(int i=1;i<=8;i++){
		for(int j=0;j<=9;j++){
			if(j==4){
				continue;
			}
			for(int k=0;k<=9;k++){
				if((j==6&&k==2)){
					continue;
				}
				dp[i][j]+=dp[i-1][k];
			}
		}
	}
}

ll dig(int x){
	int cnt=0;
	ll sum=0;
	while(x){
		a[++cnt]=x%10;
		x/=10;
	}
	a[cnt+1]=-1;
	for(int i=cnt;i>=1;i--){
		for(int j=0;j<a[i];j++){
			if(j==2&&a[i+1]==6){
				continue;
			}
			sum+=dp[i][j];
		}
		if(a[i]==4||(a[i+1]==6&&a[i]==2)){
			break;
		}
	}
	return sum;
}

int main(){
	ios::sync_with_stdio(false);
	init();
	while(1){
		cin>>n>>m;
		if(n==0&&m==0){
			break;
		}
		cout<<dig(m+1)-dig(n)<<"\n";
	}
	return 0;
}

标签:cnt,15,int,ll,62,dp,数位
From: https://www.cnblogs.com/sadlin/p/18424861

相关文章

  • 2024ICPC网络赛(2)-K.Match——匹配、奇妙的n4 DP
    题目:https://qoj.ac/contest/1799/problem/9380题意:给两个长度为\(n\)的序列\(a,b\),若\(a_i\oplusb_j\geqk\)则连一条左侧\(i\)到右侧\(j\)的边,这样得到一张二分图。对于每个\(x=1,\dots,n\),询问大小为\(x\)的匹配的数量。\(1\leqn\leq200\).首先要知道一般二......
  • 数字产品护照 (DPP) 解决方案:利用 Blazor 和区块链实现产品全生命周期追踪
    数字产品护照(DPP)解决方案:利用Blazor和区块链实现产品全生命周期追踪随着全球对可持续发展和产品透明度的关注日益增加,企业需要一种可靠的方法来跟踪和管理产品生命周期中的关键数据。我们的数字产品护照(DigitalProductPassport,DPP)系统正是为此而生,提供了一种安全透明的方......
  • PTA L1-062 幸运彩票
    L1-062幸运彩票(15分)彩票的号码有6位数字,若一张彩票的前3位上的数之和等于后3位上的数之和,则称这张彩票是幸运的。本题就请你判断给定的彩票是不是幸运的。输入格式:输入在第一行中给出一个正整数N(≤100)。随后N行,每行给出一张彩票的6位数字。输出格式:对每张彩......
  • 基于UDP的网络编程
    基于UDP的网络编程@[toc]使用基于UDP的网络编程方法,完成远程计算等差数列的前n项和功能(1)客户端将一等差数列的首项a1,公差d和项数n发送给服务器;(2)服务器端接收到数据后对接收到的数据进行解析,将前n项和的计算结果发送给客户端;(3)客户端收到后输出到控制台。UDPSenderpackageMoocPart......
  • BFS 颜色填涂———洛谷p1162
    填涂颜色题目描述由数字\(0\)组成的方阵中,有一任意形状的由数字\(1\)构成的闭合圈。现要求把闭合圈内的所有空间都填写成\(2\)。例如:\(6\times6\)的方阵(\(n=6\)),涂色前和涂色后的方阵如下:如果从某个\(0\)出发,只向上下左右\(4\)个方向移动且仅经过其他\(0\)的情况下......
  • WordPress 迁移插件终极指南
    迁移WordPress网站就像收拾房子搬到新房子一样。确保所有内容(内容、主题、插件、媒体文件甚至数据库)完美移动且没有任何损坏的挑战似乎令人畏惧。但就像搬家公司让搬家变得更容易一样,WordPress迁移插件简化了将网站从一台主机移动到另一台主机的复杂过程。无论您是切换主机、从......
  • JAVA网络编程【基于TCP和UDP协议】超详细!!!
    ip地址:唯一标识主机的地址端口号:用于标识计算机上某个特定的网络程序InetAddress类方法说明InetAddressInetAddress.getLocalHost()静态方法,获取本机InetAddress对象(主机名+ip地址)InetAddressInetAddress.getByName("主机名")根据主机名或者域名获取ip地址对象(主机名+ip地址......
  • 解决QFC810.exe运行时错误:soundplayer.dll文件丢失,恢复音频播放的实用指南
    当遇到QFC810.exe运行时错误,提示soundplayer.dll文件丢失时,这通常意味着你的系统或应用程序目录中缺少了必要的动态链接库文件(DLL),导致音频播放功能无法正常工作。以下是一份恢复音频播放的实用指南:一、确认问题首先,确认错误消息确实是由于soundplayer.dll文件丢失引起的。这......
  • 三维手势 handpose 3D RGB 手势3D建模 三维建模-手势舞 >> DataBall
    请关注即将发布 handposexplus项目三维手势handpose3DRGB单目相机手势识别手语歌曲Friends手势检测手势3D建模三维建模咨询合作DataBall项目,欢迎加以下微信。助力快速掌握数据集的信息和使用方式。......
  • ScheduledThreadPoolExecutor
    总结继承自ThreadPoolExecutor并实现了ScheduledExecutorService接口。提供了基于线程池的定时任务调度功能,允许你安排任务在未来某个时间点执行一次,或者周期性地重复执行。特性定时任务:可以安排任务在指定延迟后执行。周期性任务:可以安排任务按照固定的时......