干了这桶冰红茶!(组合数学)
来源:互联网 发布:n卡游戏优化软件 编辑:程序博客网 时间:2024/06/02 12:52
E. 干了这桶冰红茶!
BNUCIST的HWQ大神特别钟爱冰红茶这种神棍的饮料,有一天打Dota暴虐他寝室的WL后,决定大喝一顿庆祝一下。他决定用一种神棍的方式来喝冰红茶,那就是每口只喝1升,或者2升,或者3升(PS:HWQ大神真的能喝这么多= =)。爱思考的HWQ突然想知道,对于一桶整数升的冰红茶,他可以有多少种方案喝光,但似乎他不能马上想出解决的办法,纠结的他不知道答案他就喝不下去了。聪明的你快帮帮他吧。
Input
输入一个整数T,代表数据组数。
对于每一组数据,输入一个整数N,1<=N<=30,表示这桶冰红茶有N升。
Output
对于每个N,输出一个整数,代表方案数。
Sample Input
13
Sample Output
4
Hint
对于样例,3升的冰红茶,他可以(1)每次喝1升,连喝3口;(2)第一口喝1升,第二口喝2升;(3)第一口喝2升,第二口喝1升;(4)一口就喝掉3升。所以共有4种方案。
代码:
#include <stdio.h>
#include <string.h>
int C(int n, int k)
{
int i, ret = 1;
for(i = 1; i <= n - k; ++i)
{
ret *= k + i;
ret /= i;
}
return ret;
}//组合函数
int main()
{
int t, n, i, j, k, s, d, r;
int line[35];
memset(line, -1, sizeof(line));
scanf("%d", &t);
while(t--)
{
scanf("%d", &n);
if(line[n] != -1)
{
printf("%d\n", line[n]);
continue;
}
s = 0;
for(i = 0; i <= n; ++i)
{
for(j = 0; j <= n; ++j)
{
for(k = 0; k <= n; ++k)
{
d = i + 2 * j + 3 * k;
if(d > n) break;
if(d == n)
{
r = C(i + j + k, i) * C(j + k, j) * C(k, k);
s += r;
}
}
}
}
line[n] = s;
printf("%d\n", line[n]);
}
return 0;
}
- 干了这桶冰红茶!(组合数学)
- 干了这桶冰红茶!
- 干了这桶冰红茶!【找规律】
- 2013年北京师范大学新生程序设计竞赛网络赛--E. 干了这桶冰红茶!
- NYOJ 158 省赛来了【组合数学】
- 组合数学
- 组合数学
- 组合数学
- 组合数学
- 组合数学
- 组合数学
- 组合数学
- 组合数学
- 组合数学
- 组合数学
- 组合数学
- 组合数学
- 组合数学
- 例说SQL Server 2008 日期和时间函数
- 多文件共享全局变量和函数
- 简单的生活
- HDU 2985 Another lottery(水题)
- CreateCompatibleDC,CreateCompatibleBitmap,SelectObject详解
- 干了这桶冰红茶!(组合数学)
- Binary Tree Postorder Traversal(迭代写法)
- java实现冒泡排序
- Android中的resultCode的三种结果
- 一步步学习微软InfoPath2010和SP2010--第十一章节--创建审批流程(9)--工作流审批者
- PHP pack和unpack函数详解
- POJ 2253 Frogger
- cocos2d-x与Android混编实现游戏支付功能
- 使用C++文件流如何实现 修改文本文件中的数据,再存回文件中的原有位置。。。