就是 POJ2411改一下就可以了~
代码:
#include<cstdio> #include<cstring> #include<iostream> using namespace std; const int maxn=31; int n,sz,dp[maxn][9],s[4]; void solve() { memset(dp,0,sizeof(dp)); dp[0][s[0]]=dp[0][s[1]]=dp[0][s[2]]=1; for(int i=1;i<n;i++) for(int j=0;j<sz;j++) for(int k=0;k<8;k++) { if(!dp[i-1][k]) continue; if((k&(~s[j]))!=0) continue; dp[i][s[j]-k]+=dp[i-1][k]; } printf("%d\n",dp[n-1][0]); } int main() { s[0]=1;s[1]=4;s[2]=7;sz=3; while(scanf("%d",&n)&&(n!=-1)) { if(n==0) { printf("1\n"); continue; } if(n&1) { printf("0\n"); continue; } solve(); } return 0; }