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实现八种排序算法(代码详细解释)
经过一个多星期的学习.收集.整理,又对数据结构的八大排序算法进行了一个回顾,在测试过程中也遇到了很多问题,解决了很多问题.代码全都是经过小弟运行的,如果有问题,希望能给小弟提出来,共同进步. 参考:数 ...
随机推荐
- 【转】MySQL常见的运算符及使用
转自:http://www.linuxidc.com/Linux/2016-03/129672.htm MySQL中有4类运算符,它们是: 算术运算符 比较运算符 逻辑运算符 位操作运算符 算术操作符 ...
- 最简单的SPA(单页应用)实现
$(function(){ var replacePage = function(href, onFinish){ $.get(href,{},function(raw){ var data = ra ...
- iOS规范化时间格式,object-C计算指定时间与当前的时间差
object-c计算指定时间与当前的时间差 头文件(.h): #import <Foundation/Foundation.h> @interface LuDate : NSDate +( ...
- Android开发——Snackbar使用详解
http://blog.csdn.net/qq_19431333/article/details/52862348
- [Windows Server 2012] 更换PHP版本方法
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:更换PHP ...
- Hibernate框架之Criteria 详解
自从学数据库以来,从SQL查询-HQL查询-到Criteria 查询.有人问我:掌握一种查询语句不就可以吗,为什么还要学Criteria 查询?我回答道:用到特定于数据库的SQL 语句,程序本身会依赖 ...
- 【笔记JS/HTML/CSS】用div实现个性化button,背景半透明
html中的button默认样式..不太能看,如果调一调背景色和字体的话也挺适合简洁的页面设计 于是决定配合JS,用html中的div完成button 最终结果图: html代码:(first_pas ...
- codeforces_456C_dp
链接:http://codeforces.com/problemset/problem/456/C C. Boredom time limit per test 1 second memory lim ...
- 梦想CAD控件文字COM接口知识点
一.参数绘制文字 在CAD设计时,需要绘制文字,用户可以设置设置绘制文字的高度等属性. 主要用到函数说明: _DMxDrawX::DrawText 绘制一个单行文字.详细说明如下: 参数 说明 DOU ...
- 在添加新内容时,creatat没有数据
首先找到controller中的add方法,然后是执行了Service.insert()方法 然后找到service对应的impl方法, impl方法中的 public void insert(Cus ...