题目链接:A Graph Problem UVA - 11069
题目大意:从按照升序排列的n个节点中取出m个,使得这m个节点间的绝对值为2或3。问有多少种取法?
对于第n个元素来说,可以和之前的n-2个元素构成的集合构成新集合,也可以和之前的n-3个元素构成的集合构成集合。故:
ans[n]=ans[n-2]+ans[n-3]
#include <iostream>
#include <cstdio>
using namespace std;
const int N=80;
int f[N];
int main()
{
f[0]=f[1]=1;
f[2]=2;
for(int i=3;i<N;i++)
f[i]=f[i-2]+f[i-3];
int n;
while(~scanf("%d",&n)&&n)
printf("%d\n",f[n]);
return 0;
}