hdu5456 Matches Puzzle Game(记忆化dfs+dp)

TDISP(TEE Device Interface Security Protocol)软件操作流程 / 1. SPDM会话相关定义(🔶1-37、🔶1-187)// SPDM会话ID// AES-256-GCM加密密钥(TDISP要求)// 初始向量// 会话是否激活// 2. IDE流配置(🔶1-52、🔶1-625)// IDE流ID// 4个子流的AES密钥(覆盖所有子流类型)// 密钥是否已配置// 3. TDI状态与配置(🔶1-207、🔶1-210)TDI_CONFIG_UNLOCKED = 0, // 初始配置态。 阅读详情

A - B = C 可以转化成 B + C = A

题解:http://m.blog.youkuaiyun.com/blog/stl112514/48678307

http://acm.hdu.edu.cn/showproblem.php?pid=5456

#include<map>
#include<string>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<vector>
#include<iostream>
#include<algorithm>
#include<bitset>
#include<climits>
#include<list>
#include<iomanip>
#include<stack>
#include<set>
using namespace std;
typedef long long ll;
int n,m;
int a[10]={6,2,5,5,4,5,6,3,7,6};
ll dp[510][2][2][2];
int dfs(int num,int cr,int b,int c){
	if(num>n)
		return 0;		
	if(dp[num][cr][b][c]!=-1)
		return dp[num][cr][b][c];
	if(b==1&&c==1){ //两个加数都已经到最高位 
		if(num==n&&cr==0)  //没有进位 
			return 1;
		if(num+a[1]==n&&cr==1) //有进位,剩余的火柴数刚好等于进位"1" 
			return 1;
		return 0;
	}		
	if(num==n)   //火柴已经用完,又不符合上面的判别条件 
		return 0;
	dp[num][cr][b][c]=0;
	if(b==0){
		if(c==0){
			for(int i=0;i<10;i++){ 
				for(int j=0;j<10;j++){
					int t=a[i]+a[j]+a[(i+j+cr)%10];
					dp[num][cr][b][c]+=dfs(num+t,(i+j+cr)/10,0,0);
					if(i!=0)
						dp[num][cr][b][c]+=dfs(num+t,(i+j+cr)/10,1,0);
					if(j!=0)
						dp[num][cr][b][c]+=dfs(num+t,(i+j+cr)/10,0,1);
					if(i!=0&&j!=0)
						dp[num][cr][b][c]+=dfs(num+t,(i+j+cr)/10,1,1);
					dp[num][cr][b][c]%=m;
				}
			} 
		}
		else{
			for(int i=0;i<10;i++){
				int t=a[i]+a[(i+cr)%10];
				dp[num][cr][b][c]+=dfs(num+t,(i+cr)/10,0,1);
				if(i!=0)
					dp[num][cr][b][c]+=dfs(num+t,(i+cr)/10,1,1);
			}
		}
	}
	else{
		if(c==0){
			for(int i=0;i<10;i++){
				int t=a[i]+a[(i+cr)%10];
				dp[num][cr][b][c]+=dfs(num+t,(i+cr)/10,1,0);
				if(i!=0)
					dp[num][cr][b][c]+=dfs(num+t,(i+cr)/10,1,1);
			}
		}
	}
	return dp[num][cr][b][c]%=m;
}
int main(){
	int T;
	scanf("%d",&T);
	for(int cs=1;cs<=T;cs++){
		cin>>n>>m;
		n-=3;
		memset(dp,-1,sizeof(dp));
		printf("Case #%d: %d\n",cs,dfs(0,0,0,0));
	}
}
#include<iostream>
#include<algorithm>
#include<string>
#include<map>//int dx[4]={0,0,-1,1};int dy[4]={-1,1,0,0};
#include<set>//int gcd(int a,int b){return b?gcd(b,a%b):a;}
#include<vector>
#include<cmath>
#include<queue>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#define mod 1e9+7
#define ll long long
using namespace std;
int n,m;
ll dp[505][2][2][2];  //不知道为什么int不行。。 
int x[10]={6,2,5,5,4,5,6,3,7,6};  
int dfs(int num,int f,int a,int b){
    if(num>n)
        return 0;
    if(dp[num][f][a][b]!=-1)
        return dp[num][f][a][b];
    if(num==n){
        if(f==0&&a==1&&b==1)
            return 1;
        return 0;
    }
    if(a==1&&b==1){
        if(f==1&&num+2==n)
            return 1;
        return 0;
    }
    dp[num][f][a][b]=0; 
    if(a==0&&b==0){
        for(int i=0;i<10;++i){
            for(int j=0;j<10;++j){
                dp[num][f][a][b]=(dp[num][f][a][b]+dfs(num+x[i]+x[j]+x[(i+j+f)%10],(i+j+f)/10,0,0))%m;
                if(i!=0)
                    dp[num][f][a][b]=(dp[num][f][a][b]+dfs(num+x[i]+x[j]+x[(i+j+f)%10],(i+j+f)/10,1,0))%m;
                if(j!=0)
                    dp[num][f][a][b]=(dp[num][f][a][b]+dfs(num+x[i]+x[j]+x[(i+j+f)%10],(i+j+f)/10,0,1))%m;
                if(i!=0&&j!=0)
                    dp[num][f][a][b]=(dp[num][f][a][b]+dfs(num+x[i]+x[j]+x[(i+j+f)%10],(i+j+f)/10,1,1))%m;
            }
        }
    }
    else if(a==1&&b==0){
        for(int j=0;j<10;++j){
            dp[num][f][a][b]=(dp[num][f][a][b]+dfs(num+x[j]+x[(j+f)%10],(j+f)/10,1,0))%m;
            if(j!=0)
                dp[num][f][a][b]=(dp[num][f][a][b]+dfs(num+x[j]+x[(j+f)%10],(j+f)/10,1,1))%m;
        }
    }
    else if(a==0&&b==1){
        for(int i=0;i<10;++i){
            dp[num][f][a][b]=(dp[num][f][a][b]+dfs(num+x[i]+x[(i+f)%10],(i+f)/10,0,1))%m;
            if(i!=0)
                dp[num][f][a][b]=(dp[num][f][a][b]+dfs(num+x[i]+x[(i+f)%10],(i+f)/10,1,1))%m;
        }
    }
    return dp[num][f][a][b];
}
int main(){
    int t,cnt=0;
    scanf("%d",&t);
    while(t--){
        scanf("%d%d",&n,&m);
        n-=3;
        memset(dp,-1,sizeof(dp));
        printf("Case #%d: %d\n",++cnt,dfs(0,0,0,0));
    }
    return 0;
}


相机Camera日志分析之二:高通CamX架构对应Google原生Camera HAL3架构的标准API接口一级日志详细分析注释 【思维决定成长高度】当前讲述的是Camera领域log分析梯度分级讲解,讲究的是一种分析技巧,分析思维,一种感悟。技术路线的提升空间,需要更多开发技巧和开发学习能力去提升。技术大拿分析问题,可以从日志快速定位问题并解决问题,有充分的时间去学习更多知识,成长速度极快。同一起跑线,学习能力,开发效率等等都决定了程序员的成长提升空间。记得我毕业三年,同学之间的差距无限拉大,一些人还在几千块薪水,你已经是他的四五倍了,人与人的差距就是短短几年就拉开了。 阅读详情

相关推荐

工业质检新利器:手把手教你用AD-DINOv3实现零样本缺陷检测(附MVTec AD实战)

本文详细介绍了AD-DINOv3框架在工业质检中的应用,通过零样本异常检测技术解决传统方法的标注成本高和泛化能力弱问题。文章包含技术原理解析、MVTec AD数据集实战部署、模型训练流程及工业部署优化技巧,帮助读者快速掌握这一创新技术。

seed的博客 763

HDU 5456 数位dp

HDU 5456 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5456 题意: 给n根火柴,用火柴来拼数字,每个数字需要不同的火柴。 问,最多能产生多少个样子为“a - b = c”的式子,其中a、b、c均为正数 思路: 首先感谢这位博主http://blog.youkuaiyun.com/playwfun/article/details/485

beihai2013 751

三相Vienna整流器过零点电流畸变?试试这个SVPWM调制波补偿技巧

本文针对三相Vienna整流器在电流过零点附近出现的电流畸变问题,提出了一种基于SVPWM调制波补偿的有效解决方案。该方法通过注入零序分量重构占空比,巧妙解决因拓扑约束导致的调制矛盾,在基本不增加计算复杂度的前提下,显著平滑电流波形,降低THD。

weixin_29212867的博客 114

HDU 5456 Matches Puzzle Game(2015 ACM/ICPC Asia Regional Shenyang Online)

题目分析 之前也研究了一段时间的数位dp,但是一直没有见到这种形式的,状态看了好半天都不知道怎么找状态,看了别人的博客,也给看懂了,感觉其实也不是特别难,但是这种dp太不好查错了!!首先将式子化为A = B+C,那么我们需要定义状态,dp有4维,第一维很明显是火柴棍数量,第二维是有没有进位,第三位是B还能不能继续放数字,第四位是C还能不能继续放数字。状态转移方程见代码。 #include <cs

你真的介意真的在乎真的想要真的渴望的话你一定能够做到 475

【机器学习】实验2,基于回归分析的大学综合得分预测(完整代码实现+分析)

大学排名是一个非常重要同时也极富挑战性与争议性的问题,一所大学的综合实力涉及科研、师资、学生等方方面面。目前全球有上百家评估机构会评估大学的综合得分进行排序,而这些机构的打分也往往并不一致。在这些评分机构中,世界大学排名中心(Center for World University Rankings,缩写CWUR)以评估教育质量、校友就业、研究成果和引用,而非依赖于调查和大学所提交的数据著称,是非常有影响力的一个。

高丽大学人工智能硕士在读|专注大模型、RAG、OCR与AI工程实践 1973

OSGEarth三维可视化避坑指南:如何高效加载SHP/TIF地理数据?

本文详细介绍了OSGEarth在三维地球可视化中高效加载SHP/TIF地理数据的实战策略,包括空间参考系配置、性能优化、二三维联动等关键技巧。通过具体案例和代码示例,帮助开发者解决坐标偏移、性能卡顿等常见问题,提升三维GIS开发效率。

weixin_29216957的博客 222

HDU 5456 Matches Puzzle Game——数位dp

先把式子转化为B+C=A;然后用dp[i][j][0/1][0/1][0/1]表示A用了i根火柴棒,从低到高递推到第j位,上一位是否有进位,B是否用到了最高位,C是否用到了最高位的情况总数,最后统计一下dp[n][枚举位数][0][1][1]的和就好了 #include &lt;cstdio&gt; #include &lt;cstring&gt; #include &lt;iostream&...

hao_zong_yin的博客 499

SOI技术解析:绝缘体上硅的结构优势与应用场景

本文深入解析了SOI(绝缘体上硅)技术的核心结构、性能优势与应用场景。SOI通过在硅衬底与器件层之间引入绝缘的埋氧层,实现了优异的电隔离,从而显著降低芯片功耗、提升工作频率并增强抗干扰能力。该技术已广泛应用于5G射频前端、高性能计算、汽车电子及MEMS传感器等关键领域,是推动半导体性能持续提升的重要技术路径。

jj890的博客 402

HDU 5456(数位dp)

题意: 给定n(n0 && b>0 && c >0); 分析: 典型的数位dp 要表示减法关系,我们可以从低位到高位枚举a,b,c的当前位置是谁,走到当前位,状态的一个维度就是剩余多少火柴,和前一位需不需要借位。 那么走到当前还需要控制a,b,c是不是已经走到了它的最后一位,一个3位二进制数描述,若一个数已经结束,那么当前位置只能填充0且不需要使用火柴。 //#

playwfun的专栏 1538

懒人必备!Coze一键制作火柴人心理学视频,新号45天涨了2.6w粉!(附超详细实战教程)

其实,只需要借助扣子(https://www.coze.cn/),采用的是 AI 智能体工作流模式,这种模式能够一站式搞定上述所有环节,一条四五十秒的视频,短短一两分钟就能轻松搞定!让制作效率提升了整整百倍!在这篇教程里,我将毫无保留地为大家分享,如何使用扣子 Coze 批量制作 “火柴人风格的心理学视频” 的超详细步骤。

李同学Lino的博客 3852

实现航迹关联的三种JPDA算法及Matlab代码

本文介绍了三种不同的JPDA算法实现航迹关联,并提供相应的Matlab代码。卡尔曼滤波是一种常用的状态估计算法,其基本思想是根据系统模型和观测数据,通过迭代计算来更新系统状态的估计值。基于卡尔曼滤波的JPDA算法是指在航迹关联问题中,同时利用卡尔曼滤波器的状态估计和概率假设,从而确定目标之间的关联关系。基于粒子滤波的JPDA算法是指在航迹关联问题中,通过抽样生成一组粒子(代表系统的不同可能状态),从而计算目标之间的关联概率。基于启发式搜索的JPDA算法是指在航迹关联问题中,通过多次迭代寻找最优关联方案。

code_welike的博客 1831

数位dp变相 [HDU-5456]

题意:给你n个火柴 让你凑成a-b=c的形式,不包括前导0,问总共有多少个方案数(mod上m)。 思路:真的想不出来,太妙了,先把a-b=c变形成a=b+c,然后从低位往高位枚举每位填的数,dp状态定义成f[i][f1][f2][flow] (只剩下i根火柴,b是否填完,c是否填完,是否有进位的方案数),终止条件就是b和c都填完了,看看是否有进位。很妙,每次火柴数量减去要填的数量,a的数字可以算出来,是(flow+i+j)%10。 代码: #include<iostream> #include.

goto_1600的博客 309

170、电机控制中的温升测试

本文以一次IGBT炸管事故为切入点,深入剖析电机控制中温升测试的实质:不仅是温度测量,更是对铜损、铁损、散热效率等热管理问题的系统验证。作者强调测试前热电偶布置、环境记录、预运行的重要性,提出实时监控电流谐波、绕组电阻、散热梯度等关键参数,并通过损耗分离与冷却系统实测,揭示真实热源。结合温升曲线异常分析与经验建议,强调留余量、仿真结合实测、关注瞬态工况等实践要点,警示温升测试是保障可靠性与安全性的核心环节。

2401_88858637的博客 47

HDU5456 Matches Puzzle Game[数位DP]

E - Matches Puzzle Game  HDU - 5456

ControlBear的博客 564

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

hdu 5456 Matches Puzzle Game(记忆化搜索)

题目链接:hdu 5456 Matches Puzzle Game解题思路式子可以变换成A=B+C,从低位处理到高位,dp[i][j][b][c]dp[i][j][b][c]表示到第i位,j有没进位,b为数字B是否已经到达最高为,c为数字C是否已经到达最高位。代码#include <cstdio> #include <cstring> #include <algorithm>using namesp

不慌不忙、不急不躁 1614

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Hdu 5456 Matches Puzzle Game (记忆化搜索) 2015 ACM-ICPC沈阳网赛

Hdu 5456 Matches Puzzle Game (记忆化搜索) 2015 ACM-ICPC沈阳网赛 Matches Puzzle Game Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 65535/102400 K (Java/Others) Total Submission(s): 310    Accep

归去,也无风雨也无晴 519

HDU5456 Matches Puzzle Game (记忆化搜索)

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5456 题目大意:给定n(n 解题思路:把a-b=c的式子转化成b+c = a,然后对其进行记忆化搜索。 dp[i][carry][B][C]表示剩余i根火柴棒时,(carry)是否有进位,是否在b放置,是否在c放置。 /* *******************

blanKey的博客 515

HDU 5456 Matches Puzzle Game 2015沈阳网络赛(记忆化搜索)

题意: 用n 分析: dp 貌似火柴的题 应该是这种数字的题 都有差不多的状态 首先将等式变成B+C=A 易于计算          考虑状态dp[left][carry][placeB][placeC] := dp[500][0/1][0/1][0/1]          从低位到位放置数字 剩余多少根火柴 是否有进位 B是否放置 C是否放置          至于怎么转移 看第一种情况

TaoSama's Microcosm 947

2015 ACM/ICPC Asia Regional Shenyang Online 1007 hdu 5456 Matches Puzzle Game

Matches Puzzle Game Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 65535/102400 K (Java/Others) Total Submission(s): 118    Accepted Submission(s): 78 Problem Description As an ex

ZJiaQ1994的博客 777

hdu5456 Matches Puzzle Game

题意:给出n个火柴棒,问能摆成多少个a-b=c的等式,其中,a,b,c均为正整数。 做法:dp[i][j][cr][b][c],当前用了i个火柴棒,从低位到高位,已经考虑到了第j位,cr代表j-1位是否给j位贡献了一个1,b代表数字b是否已经到了最高位,c代表数字c是否已经到了最高位。不断枚举在j位的数字进行数位dp即可。由于j肯定是不断在增大的,所以写的时候可以直接舍去这维。 #includ

Last Order 1149

HDU-5456 Matches Puzzle Game(数位DP)

题意 给你n根火柴棒,求能拼成A-B=C的式子有多少种,种数模P,其中每个数字拼法如下: 如下是一个合法的式子: 思路 首先除去减号和等号的三根火柴棒,并预处理每个数字需要的火柴棒数。式子可以移项化为B+C=A。对于一个算式填充问题,按照一般的套路,从低位向高位枚举数字。在递归的过程中,需要记录三个变量,f1,f2分别表示是数字B,C是否枚举结束,flow表示是否进位。然后根据情况...

Paulliant的博客 414

HDU 5456 Matches Puzzle Game 【DP】

点我传送题目原文 题意: 问用n根火柴棍来组成等式A-B=C有多少种方案,其中减号占一个,等号占两个,所有数为正数且不含前导零,结果模以m? 解题思路: 我的做法是减去必要的三根之后,转化成A=B+C来做,枚举B,C的数位的话,A的数位是确定的,枚举数位的时候有两种情况: 1:B增加一个数位i,C增加一个数位j 2:B增加一个数位i,C停止增加,或者C增加B停止 对应两种情况,可以分...

Summer_via的博客 486

Hdu 5456 Matches Puzzle Game

问有多少个等式满足使用的火柴棍个数恰好为nn个输出等式个数(modm)\pmod{m}5≤n≤500,3≤m≤2×1095\le n \le 500,3 \le m \le 2\times 10^9就是求满足a+b=ca + b = c,并且a,b,ca,b,c每一位按照使用的火柴棍个数加权之后恰好等于n−3n-3的等式个数考虑到这个题的状态和之前使用了多少位无关并且保证剩下的火柴棍是单调递减的可以

lambda QAQ 604

【HDU - 5456】Matches Puzzle Game(数位dp,思维)

题干: As an exciting puzzle game for kids and girlfriends, the Matches Puzzle Game asks the player to find the number of possible equationsA−B=CA−B=Cwith exactlyn(5≤n≤500)n(5≤n≤500)matches (or st...

xuanweiace的博客 537

HDU 5456 Matches Puzzle Game(数位DP)

题目链接:点击打开链接 题意:给你n个火柴棍, 要求你恰好用完, 来组成一个一个等式, 等式的形式是a - b = c 。求可以组成的等式个数。 思路:很明显的数位DP, 不过巧妙的是, 该题利用了手动模拟大数相加的过程,首先, 我们不妨将等式改成b + c = a, 用d[res][a][b][c] 表示还剩res根火柴, 当前对应位相加之后有没有进位, b和c是否已经停止放火柴棒  的方法

AC_Arthur的专栏 1498

HDU 5456 Matches Puzzle Game [数位DP]

As an exciting puzzle game for kids and girlfriends, the Matches Puzzle Game asks the player to find the number of possible equations A−B=C with exactly n (5≤n≤500) matches (or sticks).给出每个数字的火柴拼接数,问用N个火柴棍构恰好造出一个无前导0的A-B=C的方程式的方案数。

Asuna_acmer 871

HDU5456 二维树状数组+nim博弈

异或和 import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.math.BigInteger; import java.util.StringTokenizer; public

老李2009 387
上一篇: hdu5452 Minimum Cut(最近公共祖先LCA+差分前缀和)
下一篇: 【忽略】一些软件的下载注意事项。。。。
ccyy-
博客等级 码龄12年 31粉丝 244原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值