zoukankan      html  css  js  c++  java
  • hdu 1143总结

    连人家的博客我都直接给抄来了,感觉真的很可耻!!

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1143

    开始也是想递推的,但是发现递推的过程中有重复计算,所以便下结论此题不是递推,然后就不会做了。后来看了人家大牛的解法,发现确实是递推,而且避免重复计算的过程的公式为f[n]=f(2)*f[n-2]+2*(f[n-4]+f[n-2]+...+f[0])(其中f[0]约定为1)。公式是这样解释的:我们从右往左定顺序,首先是划分为n-2,和2两部分,则为f[n-2]*f[2],然后划分为n-4和4两部分,但是4的部分不能分解为2,2(否则重复计算了)。我尝试着画了下只有两种。然后划分为n-6和6两部分,但是6的部分不能分解为2,4或4,2或2,2,2。也只有两种,依次类推。变得公式了。AC代码如下:

    #include<stdio.h>
    int f[31];
    int main()
    {
     int i,j,n;
     f[0]=1;f[2]=3;
     for(i=4;i<=30;i+=2)
     {
      f[i]=f[2]*f[i-2];
      j=i-4;
      while(j>=0)
      {
       f[i]+=2*f[j];
       j-=2;
      }
     }
     while(scanf("%d",&n),n!=-1)
     {
      if(n%2)
       printf("0\n");
      else
       printf("%d\n",f[n]);
     }
     return 0;
    }
  • 相关阅读:
    安卓-登陆页面的实现
    异常
    实用类
    Hashset
    Map
    LinkedList
    arraylist
    继承
    字符串相关代码
    数组代码
  • 原文地址:https://www.cnblogs.com/chaosheng/p/2532030.html
Copyright © 2011-2022 走看看