去年看错排公式,死都看不懂,基础扎实之后再来看就略懂了。

公式: dp[ n ] = ( n-1 ) * ( dp[n-1] + dp[n-2] )

解析公式:比如有n个元素,各对应n个正确位置,dp[n]表示这n个元素全部排错的可能。

比如有元素:1 2 3 4 5 ... k ... n

1.假设第n个元素,要它在错误的位置上,则有n-1种情况。

2.对于剩下的n-1个元素,随便取一个位置上的元素k,要它在错误的位置上,则有2种情况

1)它在第n个元素的位置,相当于n和k两个元素交换位置,和其它没有关系,剩余n-2个元素爱怎么排就怎么排,dp[n-2]

2)不在第n个元素的位置,假设把n作为k的正确位置,则1 2 3 4 5...(k)...n,除去正确位置k,就是n-1个元素放在n-1个位置上,dp[n-1]。

初始化:

dp[1]=0;

dp[2]=1;

dp[ n ] = ( n-1 ) * ( dp[n-1] + dp[n-2] );

hdu2068:http://acm.hdu.edu.cn/showproblem.php?pid=2068

题解:

有n个人要猜对一半以上,就是错一半以下,排错公式。

对于这些错的人,也可以互不相同,组合数公式。

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<math.h>
#include<string>
#include<map>
#include<queue>
#include<stack>
#include<set>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std; ll ans[];
ll c[][];///C(n,m) = C(n-1,m) + C(n-1,m-1) void init()
{
memset(ans,,sizeof(ans));
memset(c,,sizeof(c));
ans[]=;///一个都没有错只有1种
ans[]=;
ans[]=;
ans[]=;
for(ll i=;i<;i++)
ans[i] = (i-) * ( ans[i-]+ans[i-] ); for(int i=;i<;i++)
c[i][]=;
for(int i=;i<;i++)
for(int j=;j<=i;j++)
c[i][j] = c[i-][j] + c[i-][j-]; } int main()///hdu2068 RPG错排
{
init();
int n;
while(scanf("%d",&n) && n)
{
ll res=;
for(int i=;i<=n/;i++)
res += ans[i] * c[n][i];
printf("%lld\n",res);
}
return ;
}

hdu2049:http://acm.hdu.edu.cn/showproblem.php?pid=2049

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<math.h>
#include<string>
#include<map>
#include<queue>
#include<stack>
#include<set>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std; ll ans[];
ll c[][];///C(n,m) = C(n-1,m) + C(n-1,m-1) void init()
{
memset(ans,,sizeof(ans));
memset(c,,sizeof(c));
ans[]=;///一个都没有错只有1种
ans[]=;
ans[]=;
ans[]=;
for(ll i=;i<;i++)
ans[i] = (i-) * ( ans[i-]+ans[i-] ); for(int i=;i<;i++)
c[i][]=;
for(int i=;i<;i++)
for(int j=;j<=i;j++)
c[i][j] = c[i-][j] + c[i-][j-]; } int main()///hdu2049 考新朗
{
init();
int n,t;
scanf("%d",&t); while( t-- )
{
int n,m;
scanf("%d%d",&n,&m);
ll res=;
res = ans[m] * c[n][m];
printf("%lld\n",res);
} return ;
}

hdu2068-RPG的错排-(dp递推式)的更多相关文章

  1. hdu2068 RPG的错排 组合数/递推

    #include<stdio.h> ]; long long c(int a,int b) { ,j; ;i>=a-b+,j<=b;i--,j++) sum=sum*i/j; ...

  2. ACM_错排(递推dp)

    RPG的错排 Time Limit: 2000/1000ms (Java/Others) Problem Description: 今年暑假GOJ集训队第一次组成女生队,其中有一队叫RPG,但做为集训 ...

  3. HDU2068 RPG的错排 —— 错排

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

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

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

  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的错排 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  7. hdu2068 RPG的错排

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

  8. ACM学习历程—HDU2068 RPG的错排(组合数学)

    Description 今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁.RPG给他机会让他猜猜,第一次猜:R是公主,P是草儿 ...

  9. 神、上帝以及老天爷--hdu2048(错排,递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2048 1. N张字条的所有可能排列自然是N!(分母). 现在的问题就是求N张字条的错排数f(N)(分子 ...

随机推荐

  1. 在spring中使用Hibernate5

    目录 1. Overview 2. Spring Integration 3. Maven Dependencies 4. Configuration 4.1. Using Java Configur ...

  2. 安装和启动docker

    1.安装和启动docker yum update -y yum install -y yum-utils yum-config-manager --add-repo https://download. ...

  3. webbrowser实现一个进程一个代理的办法

    public static void RefreshIESettings(string strProxy) { const int INTERNET_OPTION_PROXY = 38; const ...

  4. Web api 右连接

    这是原来的代码,两个表的连接的方式是inner join ,查不出我要的全部数据. 后来把代码稍稍改一下,就是left join  join into 到一个临时对象里,相当于再select from ...

  5. c++打印实心菱形,空心三角形,十字星,空心正方形,实心平行四边形

    今天翻资料的时候,无意间发现了一个文件,是刚接触编程的时候用c++写的一段程序,我称之为"图形打印机",想着把所有图形都打印出来,后来发现其实每种图形的代码都是一个思路,就不想做重 ...

  6. kubernetes(k8s)集群安装calico

    添加hosts解析 cat /etc/hosts 10.39.7.51 k8s-master-51 10.39.7.57 k8s-master-57 10.39.7.52 k8s-master-52 ...

  7. 类再生(合成、继承、final)

    类再生 有两种方法达到代码复用的效果:合成.继承. 合成的语法 合成就是形成对象,把复用的代码置入对象句柄. 在类内字段使用基本数据会初始化为零,但对象句柄会初始化为null.在下面的程序中若没有ne ...

  8. Ablation Study

    We often come across 'ablation study' in machine learning papers, for example, in this paper with th ...

  9. 使用 Go 语言徒手撸一个负载均衡器

    负载均衡器在 Web 架构中扮演着非常重要的角色,被用于为多个后端分发流量负载,提升服务的伸缩性.负载均衡器后面配置了多个服务,在某个服务发生故障时,负载均衡器可以很快地选择另一个可用的服务,所以整体 ...

  10. 换个语言学一下 Golang (12)——Web基础

    一.web工作方式 我们平时浏览网页的时候,会打开浏览器,输入网址后按下回车键,然后就会显示出你想要浏览的内容.在这个看似简单的用户行为背后,到底隐藏了些什么呢?对于普通的上网过程,系统其实是这样做的 ...