您的位置:首页 > 其它

递推 钥匙计数之一

2017-12-01 21:51 134 查看
题目地址

题目大意:一把锁匙有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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: