递推 钥匙计数之一

题目地址

题目大意:一把锁匙有N个槽,槽深为1,2,3,4。每锁匙至少有3个不同的深度且至少有1对相连的槽其深度之差为3。求这样的锁匙的总数。

思路:这个题本来是在状压dp专项里遇到的,光想状压dp了,,,搜了题解才知道是递归。。也算是个比较麻烦的递归了,分成两个数组关系,直接求难求,就转化成总数,减去不符合条件的,就能得到符合的,代码很好理解,就是自己做的话,很难想到递推方程

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
long long f[35],i,a[35],b[35],s,v;
int main()
{
    cout<<"N=2: 0\n";
    cout<<"N=3: 8\n";
    s=64;v=8;
    a[3]=14;b[3]=11;
    for(i=4;i<=31;i++)
    {
        s*=4;
        v*=2;
        a[i]=2*(a[i-1]+b[i-1]);
        b[i]=2*a[i-1]+b[i-1];
        f[i]=s-2*(a[i]+b[i])-v+2;
        cout<<"N="<<i<<": "<<f[i]<<endl;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值