hdu 2068 RPG的错排
2016-06-23 20:51
344 查看
RPG的错排 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 10509 Accepted Submission(s): 4264 Problem Description 今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁。RPG给他机会让他猜猜,第一次猜:R是公主,P是草儿,G是月野兔;第二次猜:R是草儿,P是月野兔,G是公主;第三次猜:R是草儿,P是公主,G是月野兔;......可怜的野骆驼第六次终于把RPG分清楚了。由于RPG的带动,做ACM的女生越来越多,我们的野骆驼想都知道她们,可现在有N多人,他要猜的次数可就多了,为了不为难野骆驼,女生们只要求他答对一半或以上就算过关,请问有多少组答案能使他顺利过关。 Input 输入的数据里有多个case,每个case包括一个n,代表有几个女生,(n<=25), n = 0输入结束。 Sample Input 1 2 0 Sample Output 1 1 Author Rabbit Source RPG专场练习赛
来源: http://acm.hdu.edu.cn/showproblem.php?pid=2068
#include <iostream> #include <cmath> using namespace std; typedef long long LL; LL A[26]={1,0,1}; void Handle(void) //错排公式 { for(int i=3;i<=25;i++) A[i]=(A[i-1]+A[i-2])*(i-1);} LL Cal(int n,int m) // C(n,m) { LL ans=1; m = m>n/2? n-m:m;//优化 for(int i=n,j=1;i>=n-m+1;i--,j++) ans = ans*i/j; return ans; } int main() { int n;Handle(); while(cin>>n&&n) { LL sum=0; for(int i=0;i<=n/2;i++) sum+=Cal(n,n-i)*A[i];//取出i个人错排,注意这里用到 A[0]=1 cout<<sum<<endl; } }
[ Copy to Clipboard ] [ Save to File]
相关文章推荐
- Java 4种方法实现选择排序算法
- Android SDK下载速度慢的解决方法(简单使用代理)
- HDU1257 最少拦截系统 贪心算法 (多人乘船问题)水题
- Android Studio项目目录结构介绍
- HTTP请求方法
- 数据库备份checksum选项你会用么?
- ubuntu启动无桌面图标?
- [HihoCoder]#1014 : Trie树
- Android命令行创建并运行 AVD模拟器
- Problem4-1001
- c++从int转string、char的方法总结
- hdu2084 数塔 记忆化搜索水题
- C++STL之vector
- 安卓开发中非常炫的效果集合
- HDU 3530 单调队列
- HDU 1003Max Sum 动态规划 经典题 最大子序列和
- 神经网络和深度学习简史(四):深度学习终迎伟大复兴
- HDU 1231 最大连续子序列
- APP测试点总结(功能,交互,死机崩溃状态分析,容易出错的检查点)
- Jira 安装与破解