【HDU4689】Derangement(动态规划)

题面

Vjudge

给定一个\(+-\)组成的字符串,长度为\(n\)。

如果第\(i\)位是\(+\),那么\(p_i>i\),否则\(p_i<i\)

求满足上述条件的\([1,n]\)的排列个数。

题解

如果所有数都满足\(p_i<i\),那么就是\(RabbitNumbering\)

考虑如何暴力,我们可以直接大力容斥。

枚举一部分的\(+\),强制将其变为没有任何限制,那么方案数还是上面\(RabbitNumbering\)那题,最后容斥计算即可。

但是这样子复杂度吃不下。

换种方式考虑。

如果我们从左往右依次填数,设\(f[i][j]\)表示当前填到了第\(i\)个位置,有\(j\)个\(+\)不满足。

假设当前位置是\(+\),考虑如何转移

第一种是用当前的\(i\)填掉前面的一个\(+\),这样一定能够满足。

或者让他填掉后面随便一个\(-\)号。

如果当前位置是一个\(-\)的话,我们必须要填掉,

因为前面空出来了\(j\)个\(+\),所以有\(j\)个数可以用来填这个\(-\),组合算一下。

那么,当前的这个\(i\)的抉择和前面一样,所以大力转移一下就好了。

忽然发现我的代码是这道题所有提交记录里面最短的???

#include<cstdio>
#include<cstring>
#define ll long long
ll f[22][22];
char ch[22];
int n;
int main()
{
while(scanf("%s",ch+1)!=EOF)
{
n=strlen(ch+1);memset(f,0,sizeof(f));f[0][0]=1;
for(int i=1;i<=n;++i)
if(ch[i]=='+')
for(int j=1;j<=i;++j)f[i][j]=f[i-1][j-1]+f[i-1][j]*j;
else
for(int j=0;j<=i;++j)f[i][j]=f[i-1][j+1]*(j+1)*(j+1)+f[i-1][j]*j;
printf("%lld\n",f[n][0]);
}
}

【HDU4689】Derangement(动态规划)的更多相关文章

  1. 【题解】HDU4689 Derangement(有技巧的计数DP)

    [题解]HDU4689 Derangement(有技巧的计数DP) 传送门 呵呵没告诉我多测组数,然后\(n\le 20,7000\mathrm{ms}\)我写了个状压上去T了 题目大意: 要你求错排 ...

  2. HDU-4689 Derangement DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4689 题意:初始序列1,2...n,求所有满足与初始序列规定大小的错排数目.. 这道题目感觉很不错~ ...

  3. HDU-4689 Derangement

    太洗脑了: 题目意思:初始队列是1,2, 3.......n :在打乱这个队列切保证每个数字都不在原来的位置上的情况下给出一个具有+,- 的队列: 被打乱的队列 和 原来队列 对应位置的大小的关系是那 ...

  4. [HDU4689]Derangement

    https://zybuluo.com/ysner/note/1232641 题面 给出\(b_1,b_2,...,b_n\in\{−1,1\}\),求满足\((p_i−i)*b_i<0\)的\ ...

  5. [leetcode-634-Find the Derangement of An Array]

    In combinatorial mathematics, a derangement is a permutation of the elements of a set, such that no ...

  6. 增强学习(三)----- MDP的动态规划解法

    上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...

  7. 简单动态规划-LeetCode198

    题目:House Robber You are a professional robber planning to rob houses along a street. Each house has ...

  8. 动态规划 Dynamic Programming

    March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...

  9. 动态规划之最长公共子序列(LCS)

    转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...

随机推荐

  1. javaweb(八)——HttpServletResponse对象(二)

    一.HttpServletResponse常见应用——生成验证码 1.1.生成随机图片用作验证码 生成图片主要用到了一个BufferedImage类, 生成随机图片范例: 1 package gacl ...

  2. DataGridView滚动慢​的解决方法

    当DataGridView达到一定大小的时候,拖动滚动条就会非常慢,出现让人难以忍受的闪动. 即便只有100行,每行30列. 解决方法是启用DataGridView的双缓冲. 1 2 3 4 5 6 ...

  3. [转]RobotFrameWork+APPIUM实现对安卓APK的自动化测试----第一篇【安装】

    前言:关于RobotFrameWork+APPIUM实现对安卓APK的自动化测试的文章都是取自于乐于分享知识于网络的好心人们,所以我也希望我的知识可以分享给大家. 首先我们先罗列一下我们要安装的软件 ...

  4. 【Jmeter测试】BeanShell介绍和使用

      BeanShell是什么? BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言: BeanShell是用Jav ...

  5. 使用Photon引擎进行unity网络游戏开发(二)——Photon常用类介绍

    使用Photon引擎进行unity网络游戏开发(二)——Photon常用类介绍 Photon PUN Unity 网络游戏开发 Photon常用类介绍: IPunCallback PUNGIPunCa ...

  6. Siki_Unity_2-2_NGUI_UI插件学习(3.6.8版本)(未学)

    Unity 2-2 NGUI UI插件学习(3.6.8版本)(未学)

  7. MYSQL主从复制配置(整理)

    MYSQL主从原理及过程 原理 Mysql的 Replication 是一个异步的复制过程(mysql5.1.7以上版本分为异步复制和半同步两种模式),从一个 Mysql instace(我们称之为 ...

  8. OpenLDAP编译安装及配置

    原文发表于cu:2016-06-20 参考文档: 原理:http://seanlook.com/2015/01/15/openldap_introduction/ 官方文档: http://www.o ...

  9. boot,rebuild,resize,migrate有关的scheduler流程

    代码调用流程: 1. nova.scheduler.client.query.SchedulerQueryClient#select_destinations 2. nova.scheduler.rp ...

  10. 《英文版c++语言程序设计》

    compatibility [kəm,pætɪ'bɪlɪtɪ] n.兼容 compatible [kəm'pætɪb(ə)l] adj. 兼容的:能共处的:可并立的 interdependent [ɪ ...