问题 E: YK的书架
时间限制: 1 秒 内存限制: 128 MB提交: 596 解决: 138
提交 状态
题目描述
本相同的书,准备放在家里的3
层书架上(每一层放书的数量>=0且<=n)。不过YK摆放他的书有些特殊的要求,即任意两层摆放的书的数目之和,严格大于另一层的书的数目。现在YK想知道在满足他的要求的前提下有多少种不同的摆书方法。
输入
,其含义如题目描述中所述
输出
对于每行输入,输出一行答案。
样例输入
1
2
样例输出
1
3
提示
题解:
由题意可知,每层放的书的个数不能超过n个,否则无法满足题中的要求。我们假设一开始有3n本书,每层各n本。那么答案恰好为从这3n本书中拿走n-1本书的方案数,即
x_1+x_2+x_3=n-1 x_1,x_2,x_3 >= 0
的方案数,即求组合数C(n+1,2)
由题意可知,每层放的书的个数不能超过n个,否则无法满足题中的要求。我们假设一开始有3n本书,每层各n本。那么答案恰好为从这3n本书中拿走n-1本书的方案数,即
x_1+x_2+x_3=n-1 x_1,x_2,x_3 >= 0
的方案数,即求组合数C(n+1,2)
想了半天 借鉴一下这个例子
例四、将r个相同的小球放入n个不同的盒子,总共有多少种方案?
解答:该问题可以转化为r个相同的小球与n-1个相同的盒壁的排列问题
仔细理解 盒子可以为空 隔板放置的位置 可以是 末端 所以 是从 n-1 +2 中 选出 两个 隔板 所以 c (n+1,2)
#include<iostream>
#include<queue>
#include<cmath>
#include<cstring>
#include<cstdlib>
using namespace std;
long long fun(long long x)
{
long long res=1;
return x*(x+1)/2;
}
int main()
{
int n,t,m;
while(~scanf("%d",&t))
{
printf("%lld\n",fun(t));
}
return 0;
}