题意:求长度为n的每一位都属于集合S且相邻位差的绝对值<=2的数的个数。
解析:套模板记忆化搜索。
[code]:
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
using namespace std;
int n,m,a[10],dp[15][15];
int dfs(int i,int s,bool z){
//printf("%d %d %d\n",i,s,z);
if(i == -1) return 1;
if(!z&&dp[i][s] != -1) return dp[i][s];
int d,res = 0;
for(d = 0;d < m;d++){
if(z) res += dfs(i-1,a[d],0);
else if(abs(a[d]-s)<=2) res += dfs(i-1,a[d],0);
}
return z?res:dp[i][s]=res;
}
int main(){
int i,j,cas,T;
scanf("%d",&cas);
for(T = 1;T <= cas;T++){
scanf("%d%d",&m,&n);
for(i = 0;i < m;i++) scanf("%d",&a[i]);
memset(dp,-1,sizeof(dp));
printf("Case %d: %d\n",T,dfs(n-1,0,1));
}
return 0;
}