poj 1953 World Cup Noise
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<algorithm> using namespace std; int d[50][2]; void dp(int n,int i)//求n位数尾数为i的满足条件的数 { if(i==1) { if(d[n-1][0]==-1) { dp(n-1,0); } d[n][i]=d[n-1][0]; } if(i==0) { if(d[n-1][0]==-1) { dp(n-1,0); } if(d[n-1][1]==-1) { dp(n-1,1); } d[n][i]=d[n-1][0]+d[n-1][1]; } } int main() { int total; scanf("%d",&total); int k=1; memset(d,-1,sizeof(d)); d[1][0]=1; d[1][1]=1; while(total--) { int n; scanf("%d",&n); if(d[n][0]==-1) { dp(n,0); } if(d[n][1]==-1) { dp(n,1); } printf("Scenario #%d:\n%d\n\n",k++,d[n][0]+d[n][1]); } return 0; }