zoukankan      html  css  js  c++  java
  • ZOJ 1202 Divide and Count(排列组合)

    Divide and Count

    题目大意:给定箱子的数量和每个箱子的容量,在每个箱子里都装满对应容量的宝石,每颗宝石都是独一无二的,求一共有多少种放置方式。但是如果两个箱子的容量相同,则认为是  同一种箱子

    Sample input:

    2
    3 3
    3
    1 2 3
    


    Sample output:

    10
    60

    分析:这是练习赛的时候处在HUST上的题目,当时感觉代码完全对了,却坑了半天,看了题解才发现,是最后除以相同的箱子的时候,是除以它的数量的阶乘,本来是这么想的,却先把它们给乘起来了,样例只是碰巧对而已。也用不到64位整数。

    代码如下:

     1 #include <iostream>
     2 # include<cstdio>
     3 # include<cstring>
     4 using namespace std;
     5 
     6 int f(int a,int b) //从a到b的乘积
     7 {
     8     int i;
     9     int ans= 1;
    10     for(i=a; i<=b; i++)
    11     {
    12         ans *= i;
    13     }
    14     return ans;
    15 }
    16 int main()
    17 {
    18     int i,T,sum,hh,ans;
    19     int num[13],a[13];
    20     while(scanf("%d",&T)!=EOF)
    21     {
    22 
    23         sum = 0;
    24         for(i=0; i<=12; i++)
    25             a[i]=0;
    26         for(i=0; i<T; i++)
    27         {
    28             scanf("%d",&num[i]);
    29             a[num[i]]++;
    30             sum += num[i];
    31         }
    32         ans =1;
    33         for(i=0; i<T; i++)
    34         {
    35             ans *= f(sum-num[i]+1,sum)/f(1,num[i]);
    36             sum -= num[i];
    37         }
    38          for(i=0; i<=12; i++)
    39         {
    40             if(a[i]>1)
    41                 ans /= f(1,a[i]);   //这里除以阶乘
    42         }
    43         printf("%d
    ",ans);
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    关于互联网产品经理的认知
    互联网产品经理的工作职责
    软件需求分析方法
    Enumeration遍历http请求参数的一个例子
    jquery datatable使用简单示例
    改变输出的文字的字体格式
    excel 类获取起始列和使用列
    调试不能命中断点
    CString转换为const char*
    __declspec(dllexport)
  • 原文地址:https://www.cnblogs.com/acm-bingzi/p/3597553.html
Copyright © 2011-2022 走看看