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

公式: 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. Unary模式下客户端创建 default-executor 和 resolver-executor 线程和从启动到执行grpc_connector_connect的主要流程

    (原创)C/C/1.25.0-dev grpc-c/8.0.0, 使用的例子是自带的例子GreeterClient 创建 default-executor 和 resolver-executor 线程 ...

  2. Nginx入门教程(转)

    原文:https://www.cnblogs.com/qdhxhz/p/8910174.html nginx入门教程 一.概述    什么是nginx?   Nginx (engine x) 是一款轻 ...

  3. contenteditable联合v-html实现数据双向绑定的vue组件

    全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/11466197.html 先看最终实现的demo效果图: (1)上面看似文本域的大框是通过给div ...

  4. AFO啦!

    \(\mathrm{CSP}2019\)结束了,我的信息生活也要结束了,从五年级开始的信息学习,陪伴我度过了很多,今天要放手,全心学习文化课了. 信息学,再见!

  5. SQL系列(十一)—— 函数(function)

    SQL中的函数也非常多,而且不同的DBMS提供了相应的特殊函数.但是常用的共性函数大致可以分为以下几种: 函数类型 函数 数值函数 1.算术计算:+.-.*./ 2.数值处理:ABS()绝对值处理.P ...

  6. JWT与RBAC权限模型

    JWT JWT是什么? Json web token (JWT)是为了网络应用环境间传递声明而执行的一种基于JSON的开发标准(RFC7519),该token被设计为紧凑且安全的,特别适用于分布式站点 ...

  7. Echarts 学习系列(3)-Echarts动态数据交互

    写在前面 上一小节,我们总结了折线(面积)图.柱状(条形)图.饼(圆环)图类型的图表. 但是,都是静态的.接下来的,这一小节,总结的是Echarts 动态数据的交换. 前置条件 开发环境:win10 ...

  8. NuGet包 安装相关指令

    一.安装 1.安装指定版本类库install-package <程序包名> -version <版本号> 2.安装到指定的项目install-package <程序包名& ...

  9. 一张图看懂SharpCamera

    通过下面的图片,可以瞬间看懂整个类库的脉络.

  10. delegate、Action、Func的用法

    委托的特点 委托类似于 C++ 函数指针,但它们是类型安全的. 委托允许将方法作为参数进行传递. 委托可用于定义回调方法. 委托可以链接在一起. delegate的用法 delegate void B ...