zoj——1202 Divide and Count
Divide and Count
Time Limit: 2 Seconds Memory Limit: 65536 KB
Jack has several beautiful diamonds, each of them is unique thus precious. To keep them safe, he wants to divide and store them in different locations. First, he has bought some coffers. These boxes are identical except that their capacities (the number of the diamonds that a box can contain) may diverse. Before he puts his diamonds in, he wants to figure out how many different ways he can store these diamonds into the coffers. He recruits you, a young programmer from Zhejiang University, to give him the answer.
Input:
The input consists of several test cases. Each test case begins with a positive integer N, which indicates the number of the coffers Jack has bought. Then the following N integers are the capacities of each box. The total number of the diamonds Jack has equals to the sum of the capacities of all the coffers.
All the integers given are no greater than 12, you can be assured that a result always fits into a 32-bit integer.
Output:
For every test case, print out an integer representing the number of the different ways Jack can store his diamonds. Each integer is to be printed on a single line.
Sample input:
2 3 3 3 1 2 3
Sample output:
10 60
题意:
杰克有好几颗漂亮的钻石,每一颗都是独一无二的。为了保护他们的安全,他想把它们分开存放在不同的地方。首先,他买了一些小金库。这些盒子是相同的,只是它们的容量(盒子所能容纳的钻石的数目)可能是不同的。在他把钻石放进去之前,他想弄清楚他能把这些钻石存放在金库里有多少种不同的方式。他招募你,一个来自浙江大学的年轻程序员,给他答案。
输入:
输入由几个测试用例组成。每个测试用例以一个正整数n开头,这表示杰克购买的金库的数量。接下来的n个整数是每个盒子的容量。杰克钻石的总数等于所有金库的总和。
给定的所有整数不大于12,可以确保结果总是适合32位整数。
输出:
对于每个测试用例,打印出一个整数,表示杰克存储钻石的不同方式的数量。每个整数都要在一行上打印。
思路:
排列组合
我们来手模一下第一个样例:2 3 3 我们先往第一个金库中装钻石,这样的话我们有C36(比较丑,凑活着看吧)种方案,我们在往第二个匣子中放钻石,这是我们已经把3个钻石放入了第一个匣子中,也就是说我们这是还剩下6-3颗钻石,我们把这些钻石放入这个匣子中,有C33种方案。但是我们这样算出来肯定是不对的,因为容积相同的金库完全相同,那么也就是说我们要除去匣子相同的方案数,但是除什么呢??!这也正是我与一位大佬发生争执的地方。我认为应该是除相同个数的阶乘,而他认为除相同的个数。
好,我们先不看这个样例,因为看不出来啊、、、、
我们自己手模样例,就找个简单的吧,3 1 1 1 我们跟上面说的一样,先往第一个匣子中放钻石,这样我们有C13种方案,我们往第二个匣子中放钻石这是我们有3-1颗钻石,我们找出一个来放入第二个匣子中,这样我们有C12种方案数,最后一个我也就不再写了,这样我们求出来一共有6种方法,但是我们知道这三个匣子是完全相同的,那么也就是说我们只有一种方法,那么这样的话我们该除几就显而易见了。
至于题的这个公式,我想各位大佬上面的解释的时候应该也都能看明白(也可能本蒟蒻写的一点都不明白)那我就不啰嗦了
代码:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 20
using namespace std;
long long ans;
int n,m,w,tot,a[N],num[N];
int read()
{
,f=; char ch=getchar();
; ch=getchar();}
+ch-'; ch=getchar();}
return x*f;
}
int jie(int x,int y)
{
;
for(int i=x;i<=y;i++)
sum*=i;
return sum;
}
int main()
{
while(~scanf("%d",&n))
{
;i<=;i++)
a[i]=; ans=;tot=;
;i<=n;i++)
num[i]=read(),a[num[i]]++,tot+=num[i];
;i<=n;i++)
{
w=tot-num[i]+;
ans*=jie(w,tot)/jie(,num[i]);
tot-=num[i];
}
;i<=;i++)
,a[i]);
cout<<ans<<endl;
}
;
}
zoj——1202 Divide and Count的更多相关文章
- ZOJ 1202 Divide and Count(排列组合)
Divide and Count 题目大意:给定箱子的数量和每个箱子的容量,在每个箱子里都装满对应容量的宝石,每颗宝石都是独一无二的,求一共有多少种放置方式.但是如果两个箱子的容量相同,则认为是 同一 ...
- ZOJ 1202 Divide and Count
原题链接 题目大意:某人手上有一大批钻石,他同时有一些盒子恰好放下这些钻石,每个盒子可以放一个或多个,问一共有几种方法. 解法:这其实是一道排列与组合计算题,主要是写出组合算法的代码,把计算公式转为程 ...
- POJ题目细究
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
- 【转】POJ百道水题列表
以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...
- ZOJ 1610.Count the Colors-线段树(区间染色、区间更新、单点查询)-有点小坑(染色片段)
ZOJ Problem Set - 1610 Count the Colors Time Limit: 2 Seconds Memory Limit: 65536 KB Painting s ...
- 466. Count The Repetitions
Define S = [s,n] as the string S which consists of n connected strings s. For example, ["abc&qu ...
- Java的大数操作分为BigInteger和BigDecimal
Java的大数操作分为BigInteger和BigDecimal,但这两给类是分开使用的,有时候在编程的时候显得略微繁琐,现在编写了一个将二者合二为一的大数操作类. 大数操作类代码如下: 1 pack ...
- Java大数操作类
Java的大数操作分为BigInteger和BigDecimal,但这两给类是分开使用的,有时候在编程的时候显得略微繁琐,现在编写了一个将二者合二为一的大数操作类. 大数操作类代码如下: packag ...
- Java实现八种排序算法(代码详细解释)
经过一个多星期的学习.收集.整理,又对数据结构的八大排序算法进行了一个回顾,在测试过程中也遇到了很多问题,解决了很多问题.代码全都是经过小弟运行的,如果有问题,希望能给小弟提出来,共同进步. 参考:数 ...
随机推荐
- printf的整型
参 数 说 明 %d 输出数字长为变量数值的实际长度 %md 输出m位(不足补空格,大于m位时按实际长度输出) %-md m含义同上.左对齐输出 %ld l(小写字母)表示输出“长整型”数据 %m1 ...
- Linq 内连接和外连接(转载)
一.内连接 Model1Container model = new Model1Container(); //内连接 var query = from s in model.Student join ...
- 14 C#编程中的逻辑运算
在C#编程中,我们经常需要处理这些情况. 1. 某种条件为真时,程序这样处理:当某种条件为假时,程序那样处理. 2. 当某种条件为真时,程序一直这样处理: 这里的条件,在C#中就是逻辑运算.接下来我就 ...
- 创建maven项目遇到的问题
1.新建完成的maven项目,缺少src/main/java 解决方案:把项目中的jre换成eclipse中默认的jre. 另外还可以参考:解决Eclipse建立Maven项目后无法建立src/mai ...
- Eclipse开发工具介绍
Eclipse是一个基于Java的.开放源码的.可扩展的应用开发平台,它为编程人员提供了一流的Java集成开发环境(Integrated Development Environment,IDE).在E ...
- mybatis 关联查询
1.关联的两个实体类 外部类 parent public class Parent{ private String parentId; private String parentName; priva ...
- Sonar 规则
bug类型: 1.".equals()" should not be used to test the values of "Atomic" classes. ...
- Angular——内置过滤器
基本介绍 在AngularJS中使用过滤器格式化展示数据,在“{{}}”中使用“|”来调用过滤器,使用“:”传递参数. 基本使用 过滤器可以串起来使用,只要用 | 来衔接就行了,可以将上次返回的 ...
- [转]最值得拥有的免费Bootstrap后台管理模板
在PHP开发项目中,后台管理因为面向群体相对比较固定,大部分以实现业务逻辑和功能.使用Bootstrap后台模板可以让后端开发很轻松的就展现给客户一个响应式的后台,节约前端开发的时间.下面PHP程序员 ...
- 【sqli-labs】 对于less34 less36的宽字节注入的一点深入
1.AddSlashes() 首先来观察一下是如何通过构造吃掉转义字符的 先将less 34的网页编码换成gbk 加上一些输出 echo "Before addslashes(): &quo ...