要求答对一半或以上就算过关,请问有多少组答案能使他顺利过关。

逆向思维,求答错一半或以下的组数

1,错排

错排公式的由来

  pala提出的问题: 十本不同的书放在书架上。现重新摆放,使每本书都不在原来放的位置。有几种摆法?
  这个问题推广一下,就是错排问题: n个有序的元素应有n!种不同的排列。如若一个排列式的所有的元素都不在原来的位置上,则称这个排列为错排。
递推的方法推导错排公式

  当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示,那么M(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推.
  第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法;
  第二步,放编号为k的元素,这时有两种情况.1,把它放到位置n,那么,对于剩下的n-2个元素,就有M(n-2)种方法;2,不把它放到位置n,这时,对于这n-1个元素,有M(n-1)种方法;
  综上得到
  M(n)=(n-1)[M(n-2)+M(n-1)]
  特殊地,M(1)=0,M(2)=1

2,组合

答对 i 个人,即答错 n - i 个人,共有C(n, n - i) * M[n - i] 组答案

其中C(n, n - i) 就是从 n 个人选出 n - i 个人的组合数

代码如下:

#include<stdio.h>
#include<iostream>
using namespace std;
__int64 f[] = {, };
void init()
{
for(int i = ; i <= ; i ++)
f[i] = (i - ) * (f[i - ] + f[i - ]);//i 个人全错排的组数
}
__int64 C(int n, int m)
{
__int64 s = ;
for(int i = ; i <= m; i ++)
s = s * (n - i + ) / i;//乘后立即除,防止溢出,但不可写成s *= (n - i + 1) / i,(n - i + 1) / i 这个表达式有可能不能整除
return s; //导致结果变小
}
int main()
{
init();
int n;
while(~scanf("%d", &n), n)
{
__int64 sum = ;
for(int i = ; i <= n / ; i ++) //组合,从n个人选i个让她们错排,则是猜对了n - i个MM,i从0到n/2,求的是猜对n到n/2个MM的组数
sum += C(n, i) * f[i];
cout <<sum <<endl;
}
return ;
}

HDU 2068 RPG的错排的更多相关文章

  1. [HDU 2068] RPG的错排 (错排问题)

    RPG的错排 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2068 题目大意: 有N个人对应N个名字,然后你去把每一个名字对应到每个人,只要求答对一半 ...

  2. HDU 2068 RPG的错排(错排公式 + 具体解释)

    RPG的错排 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  3. HDU RPG的错排 【错排&&组合】

    RPG的错排 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  4. hdu2068 RPG的错排 错排+组合

    RPG的错排 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  5. Hdu2068 RPG的错排 2017-06-27 15:27 30人阅读 评论(0) 收藏

    RPG的错排 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submis ...

  6. hdu2068 RPG的错排

    RPG的错排 时间限制:1000/1000 MS(Java / Others)内存限制:32768/32768 K(Java / Others)总提交内容:16421接受的提交内容:6670 问题描述 ...

  7. HDU2068 RPG的错排 —— 错排

    题目链接:https://vjudge.net/problem/HDU-2068 RPG的错排 Time Limit: 1000/1000 MS (Java/Others)    Memory Lim ...

  8. HDU-2068 RPG的错排(组合, 错排)

    RPG的错排 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  9. HDU 2068 RPG错排 [错排公式]

    1.题意:1到N的序列的排列中,元素位置与元素值相对应的情况(值为i的元素在某个排列中正好排在第i个位置)大于等于序列规模一半的情况,有多少个? 2.输入输出:每组数据一个数,N,规定输入以0结尾: ...

随机推荐

  1. HAProxy学习笔记

    HAProxy:著名的负载均衡器,工作于用户空间的服务程序,其有两种工作模式: TCP mode:四层调度(模拟实现,依赖于socket进行通信) HTTP mode:七层调度 目前维护的稳定版本分支 ...

  2. svn各个图标代表什么意思

    最近参与公司项目开发要使用SVN,下面随笔记下在使用SVN中常见的图标各代表什么意思 灰色向右箭头:本地修改过 ,本地代码没有及时上库.灰色向右且中间有个加号的箭头:本地比SVN上多出的文件灰色向右且 ...

  3. 解决:NoSuchAlgorithmException: Algorithm HmacSHA1 not available

    windows下运行macInstance = Mac.getInstance("HmacSHA1");完全正常,Linux下则出现异常: java.security.NoSuch ...

  4. sql server 触发器应用 insert

    --添加自定义错误码提示,要求先有英文版才能有中文版 EXEC sp_addmessage ,,@msgtext='Violation of the table unique constraint', ...

  5. DOM事件机制进一步理解

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  6. Unity3d利用opencv保存游戏视频

    脚本MyVideoWriter.cs using UnityEngine; using System.Collections; using OpenCvSharp; using OpenCvSharp ...

  7. Asp.Net MVC4入门指南(9):查询详细信息和删除记录

    在本教程中,您将查看自动生成的Details和Delete方法. 查询详细信息和删除记录 打开Movie控制器并查看Details方法. public ActionResult Details(int ...

  8. ASP.NET控件<ASP:Button /> html控件<input type="button">区别联系

    ASP.NET控件<ASP:Button />-------html控件<input type="button">杨中科是这么说的:asp和input是一样 ...

  9. [Arduino] Arduino猪头笔记

    1. 步进电机驱动 今天才发现....原来在不同的步进电机驱动模块里面,循环时钟是不一样的.... 步进电机驱动模块以及电路配置: 驱动代码的主要部分: int sp_param = 16383; d ...

  10. About memories in ASIC FPGA

    1. Write first | Read First | No Change区别在于:en & wr的时候,dout是什么,三种case对应于: dout = din; dout = mem ...