好久没有 搞递推,这个题在DP专题,其实是赤裸裸的一维的递推,想了好一会啊。F(n)可以由第一个不放F(n-1)加第一个放第二个不放f(n-2)加。。。
F(N) = F(N-1)+F(N-2)...F(N-M)删除中间输出的时候,改错了2次。。。
1 #include2 #include 3 #include 4 __int64 p[51]; 5 int main() 6 { 7 int bi[7]; 8 int i,j,n,m; 9 bi[0] = 1;10 for(i = 1;i <= 5;i ++)11 {12 bi[i] = 2*bi[i-1];13 }14 scanf("%d%d",&n,&m);15 p[0] = 1;16 for(i = 1;i <= m-1;i ++)17 {18 p[i] = bi[i];19 }20 for(i = m;i <= n;i ++)21 {22 for(j = 1;j <= m;j ++)23 {24 p[i] += p[i-j];25 }26 }27 printf("%I64d\n",p[n]);28 return 0;29 }