• bzoj3028 食物


    3028: 食物

    Time Limit: 3 Sec  Memory Limit: 128 MB
    Submit: 735  Solved: 514
    [Submit][Status][Discuss]

    Description

    明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险!我们暂且不讨论他有多么NC,他又幻想了他应
    该带一些什么东西。理所当然的,你当然要帮他计算携带N件物品的方案数。他这次又准备带一些受欢迎的食物,
    如:蜜桃多啦,鸡块啦,承德汉堡等等当然,他又有一些稀奇古怪的限制:每种食物的限制如下:
    承德汉堡:偶数个
    可乐:0个或1个
    鸡腿:0个,1个或2个
    蜜桃多:奇数个
    鸡块:4的倍数个
    包子:0个,1个,2个或3个
    土豆片炒肉:不超过一个。
    面包:3的倍数个
    注意,这里我们懒得考虑明明对于带的食物该怎么搭配着吃,也认为每种食物都是以‘个’为单位(反正是幻想嘛
    ),只要总数加起来是N就算一种方案。因此,对于给出的N,你需要计算出方案数,并对10007取模。

    Input

    输入一个数字N,1<=n<=10^500
     

    Sample Input

    输入样例1
    1
    输入样例2
    5

    Sample Output

    输出样例1
    1
    输出样例2
    35
    分析:生成函数的裸题. 
       现将每一个式子化成分式,相乘后能消掉很多项. 最后将式子展开看其组合意义即可.
       (1 + x + x^2 + x^3 +......)^n中x^p前系数的组合意义是将p拆分成若干个非负整数相加的方案数. 利用隔板法求解即可.
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    const int mod = 10007;
    char s[1010];
    int n;
    
    int main()
    {
        scanf("%s",s + 1);
        int t;
        for (int i = 1; i <= strlen(s + 1); i++)
        {
            if (i == 1)
                t = s[i] - '0';
            else
                t = (t * 10 % mod + s[i] - '0') % mod;
        }
        n = t;
        printf("%d
    ",n * (n + 1) % mod * (n + 2) % mod * 1668 % mod);
    
        return 0;
    }
  • 相关阅读:
    禅道学习(一)
    遍历
    php特性
    jsonRPC
    model
    水仙花数(详细2
    水仙花数(详细1
    递归求n 项和
    poj 1651
    nyist 289
  • 原文地址:https://www.cnblogs.com/zbtrs/p/8676008.html
Copyright © 2020-2023  润新知