码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 1521 排列组合 —— 指数型生成函数

时间:2018-12-03 01:06:41      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:int   size   原来   tar   \n   ini   div   ref   bsp   

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1521

标准的指数型生成函数;

WA了好几遍,原来是多组数据啊囧;

注意精度,直接强制转换(int)是舍去小数,会WA,+0.5再强制转换或输出 %.0lf 是四舍五入,能A。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef double db;
int const xn=15;
int n,m,jc[xn],s[xn];
db f[xn],g[xn];
void init()
{
  jc[0]=1;
  for(int i=1;i<=10;i++)jc[i]=jc[i-1]*i;
}
int main()
{
  init();
  while(~scanf("%d%d",&n,&m))
    {
      for(int i=0;i<=m;i++)f[i]=g[i]=0;//
      for(int i=1;i<=n;i++)scanf("%d",&s[i]);
      for(int i=0;i<=s[1];i++)f[i]=1.0/jc[i];
      for(int i=2;i<=n;i++)
    {
      for(int j=0;j<=m;j++)
        for(int k=0;k<=s[i]&&j+k<=m;k++)
          g[j+k]+=f[j]/jc[k];
      for(int j=0;j<=m;j++)f[j]=g[j],g[j]=0;
    }
      printf("%.0lf\n",f[m]*jc[m]);
    }
  return 0;
}

 

hdu 1521 排列组合 —— 指数型生成函数

标签:int   size   原来   tar   \n   ini   div   ref   bsp   

原文地址:https://www.cnblogs.com/Zinn/p/10055924.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!