zoukankan      html  css  js  c++  java
  • hdu 2110 基础母函数

    题意:退出本身并不麻烦,麻烦的是,退出的人需要取走相应比例(1/3)金额的资产。
    假设公司此时一共有n种价值的资产,每种价值的资产数量已知,请帮助心烦意乱的XHD夫妇计算一共有多少种分割资产的方法。
     
    现在我们引用《组合数学》上最经典的一个例题:
    我们要从苹果、香蕉、橘子和梨中拿一些水果出来,要求苹果只能拿偶数个,香蕉的个数要是5的倍数,橘子最多拿4个,梨要么不拿,要么只能拿一个。问按这样的要求拿n个水果的方案数。
    g(x)=(1+x^2+x^4+...)(1+x^5+x^10+..)(1+x+x^2+x^3+x^4)(1+x)  就是最终的生成函数
     
     这个母函数让我想起了去年暑假集训,那个时候母函数搞了几天都不懂,bfs完全不会,dijkstra搞不懂就反复裸拍代码,acm入门确实很难,但是一旦入了门就能感受到其中的乐趣,学的越多,感觉自己的知识就越匮乏,也就想学的更多。正是这样的循环让我的代码能力得以提升,孜孜不倦的去追求更多的知识。
     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<queue>
     7 #include<map>
     8 using namespace std;
     9 #define MOD 1000000007
    10 const int INF=0x3f3f3f3f;
    11 const double eps=1e-5;
    12 #define cl(a) memset(a,0,sizeof(a))
    13 #define ts printf("*****
    ");
    14 const int MAXN=105;
    15 int n,tt;
    16 int c1[10010],c2[10010],m[MAXN],p[MAXN];
    17 int main()
    18 {
    19     int i,j,k;
    20     #ifndef ONLINE_JUDGE
    21     freopen("1.in","r",stdin);
    22     #endif
    23     while(scanf("%d",&n)!=EOF)
    24     {
    25         if(n==0)    break;
    26         int sum=0;
    27         for(i=1;i<=n;i++)
    28         {
    29             scanf("%d%d",&p[i],&m[i]);
    30             sum+=p[i]*m[i];
    31         }
    32         if(sum%3!=0)
    33         {
    34             printf("sorry
    ");
    35             continue;
    36         }
    37         sum/=3;
    38         cl(c1),cl(c2);
    39         for(i=0;i<=p[1]*m[1];i+=p[1])    c1[i]=1;   //初始化第一个函数
    40         for(i=2;i<=n;i++)   //需要乘的次数
    41         {
    42             for(j=0;j<=sum;j++) //生成函数
    43             {
    44                 for(k=0;k<=p[i]*m[i]&&(k+j)<=sum;k+=p[i])   //相乘的函数
    45                 {
    46                     c2[k+j]+=c1[j];
    47                 }
    48             }
    49             for(j=0;j<=sum;j++)
    50             {
    51                 c1[j]=c2[j]%10000;
    52                 c2[j]=0;
    53             }
    54         }
    55         if(c1[sum]==0)
    56             printf("sorry
    ");
    57         else printf("%d
    ",c1[sum]);
    58     }
    59 }
  • 相关阅读:
    基于 cobbler 实现自动安装 linux 系统
    自动安装 linux 系统
    从12306网站新验证码看Web验证码设计与破解
    用java实现删除文件夹里的所有文件
    本机访问其它电脑上的oracle数据库
    powerdesigner 15 如何导出sql schema
    使用PowerDesigner建立数据库模型
    com.google.gson.stream.MalformedJsonException的解决办法
    Spring注解详解
    nginx中文手册内容说明
  • 原文地址:https://www.cnblogs.com/cnblogs321114287/p/4440294.html
Copyright © 2011-2022 走看看