zoukankan      html  css  js  c++  java
  • 【bzoj1002】 [FJOI2007]轮状病毒DP

    递推+环状特殊处理+高精度

     
    #include<algorithm>
    #include<iostream>
    #include<cstdlib>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    using namespace std;
     
    int n;
    int f[105][50],sum[50];
     
    void mul(int* a,int* b,int x)
    {
        a[0]=max(a[0],b[0]);
        for (int i=1;i<=b[0];i++)
            a[i]+=x*b[i];
        for (int i=1;i<=a[0];i++)
            if (a[i]>=10)
            {
                if (i==a[0])
                    a[0]++;
                a[i+1]+=a[i]/10;
                a[i]%=10;
            }
    }
     
    int main()
    {
        scanf("%d",&n);
        f[0][0]=f[0][1]=1;
        for (int i=1;i<n;i++)
            for (int j=1;j<=i;j++)
                mul(f[i],f[i-j],j);
        for (int i=1;i<=n;i++)
            mul(sum,f[n-i],i*i);
        for (int i=sum[0];i>=1;i--)
            printf("%d",sum[i]);
        return 0;
    }
    

      

     
     
    另外有一种方法

    记f[n]为n轮状的答案

    观察下列式子

    f[1]=1=1*1

    f[2]=5=5*1*1

    f[3]=16=4*4

    f[4]=45=5*3*3

    f[5]=121=11*11

    f[6]=320=5*8*8

    可以发现,n为奇数时,f[n]=F[n]*F[n]。

    n为偶数时,f[n]=5*F[n]*F[n]。

    其中F[n]=F[n-1]*3-F[n-2],F[1]=1,F[2]=4.

    再加上高精度

  • 相关阅读:
    PHP的五大运行模式
    PHP设计模式-工厂模式
    php+redis实现消息队列
    面试题一
    Linux常用命令
    实现session在多台服务器上共享
    Memcache和redis的区别
    PHP设计模式-建造者模式
    FASTCgi和PHP-fpm关系
    安装vm虚拟机
  • 原文地址:https://www.cnblogs.com/yangjiyuan/p/5320371.html
Copyright © 2011-2022 走看看