数论--错排

这篇博客探讨了两个与错排问题相关的算法题目。第一个题目涉及从N对新婚夫妇中计算出M个新郎找错新娘的情况数,通过递推公式和排列组合解决。第二个题目是晚会抽奖问题,计算出所有人都没抽中自己名字的概率,同样利用了错排的概念。这两个问题都展示了错排在概率计算中的应用。
摘要由CSDN通过智能技术生成

概念

先上唯一看得懂的错排概念,大概像递推dp一样?分情况分步骤往上级递推出的公式,具体过程如下:
在这里插入图片描述

贴贴题:
HDU2049

新郎官题目大意:

假设一共有N对新婚夫妇,其中有M个新郎找错了新娘,求发生这种情况一共有多少种可能.
思路:也算是一种错排的扩展,但是得用到排列组合的公式,从n对新婚夫妇里选m个新郎。

#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
    int n,m,i,j,t;
    cin>>t;
    while(t--){
        cin>>n>>m;
            int dp[25];
            dp[1]=0;
            dp[2]=1;
            for(i=3;i<=n;i++)
                 dp[i]=(i-1)*(dp[i-1]+dp[i-2]);
            int mo=1,zi=1,z2=1,z3=1;
            for(i=1;i<=n;i++)
                   mo*=i;
            for(i=1;i<=(n-m);i++)
                   z2*=i;
            for(i=1;i<=m;i++)
                    z3*=i;
            cout<<(dp[m])*((mo)/(z2*z3))<<endl;
    }
}

HDU2048

老天爷签名大意:

首先,所有参加晚会的人员都将一张写有自己名字的字条放入抽奖箱中;
然后,待所有字条加入完毕,每人从箱中取一个字条;
最后,如果取得的字条上写的就是自己的名字
求都不中奖的概率。
思路:首先列出所有的可能,然后再除以都不中奖的可能,都不中奖也就是错排的方案数.

#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
        int n,i,j,t,dp[25];
        dp[0]=0,dp[1]=0,dp[2]=1;
        for(i=3;i<=20;i++){
            dp[i]=(i-1)*(dp[i-1]+dp[i-2]);
        }
        int sum[25];
        sum[0]=0,sum[1]=1,sum[2]=2;
        for(i=3;i<=20;i++){
            sum[i]=i*sum[i-1];
        }
        cin>>t;
        while(t--){
                cin>>n;
                double ans1;
                 ans1=dp[n]*1.0/sum[n];
                 ceil(ans1);
                 ans1*=100;
                 //cout<<dp[n]<<" " <<sum[n]<<endl;
                 printf("%.2lf%%\n",ans1);
        }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值