1331-密码--2023/1/7

这个题目呢就是一个递推的题目,想到了递推就比较简单啦。但是要小心一点的是,千万要注意数据的范围,开__int64防止溢出。

好啦,我就不废话了,直接上代码:(只写了处理函数的关键部分的代码)

代码部分有递推部分的理解哦

__int64 dp[46][5]; //第一维是有多少位的意思,第二维是最后一位可以填什么的意思
__int64 sum[46];  //长度为n的有多少种填法

//预处理出所有的结果
//还有这个题目注意要小心溢出

void init(){
	dp[1][1]=dp[1][2]=dp[1][3]=dp[1][4]=1; //当长度为1情况肯定都是可以填的
	sum[1]=4;
	for(int i=2;i<=45;i++){
		dp[i][1]=dp[i-1][2]+dp[i-1][3]; //第i位为1那么第i-1位就可以填2和3
		dp[i][2]=dp[i-1][1]+dp[i-1][3]+dp[i-1][4]; //第i位为2那么第i-1位就可以填1 3 4
		dp[i][3]=dp[i-1][2]+dp[i-1][1]+dp[i-1][4]; //第i位为3那么第i-1位就是可以填 1 2 4
		dp[i][4]=dp[i-1][3]+dp[i-1][2]; //第i位为4那么第i-1位就是可以填2 3
		sum[i]=dp[i][1]+dp[i][2]+dp[i][3]+dp[i][4]; //直接求和
	}
}

很棒呢,继续加油哦,我们明天再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值