看大佬的题解学到的

题目意思就是给你一个N,代表有n个人身高分别从1到n,求出共有多少种排法使得身高是高低交错的。

f[i][0]代表长度为i的,最后结尾为高低排法的种数

f[i][1]代表长度为i的,最后结尾为低高排法的种数

ans[i]代表长度为i的,总的排法   因此f[i][0]+f[i][1]=ans[i]

当我们求ans[i]时,即插入身高为i的人时,新插入的身高是最高的,因此i前面的必须满足最后身高为高低,i后为低高。

因此我们可以得出:

ans[i]=f[j][0]*f[i-j-1][1]*C(i-1,j)

得出ans[i]之后我们可以得出f[i][0]与f[i][1]

证明f[i][0]=f[i][1]

1:当i为偶数时

f[i][0]其中一种排法为1010,则全部反过来,则变为0101,即f[i][0]中的每一种方案都能在f[i][1]中找到一种方案使得对应 起来

2:当i为奇数是

f[i][0]一种排法为01010

例如13254,如果第一个数小于最后一个数,1<4,我们可以将4移到最前面,即41325,变为了10101

例如45231,第一个数大于最后一个数,4>1,我们将4移到后面,即52314,变为了10101

所以f[i][0]中的每一种方案都能在f[i][1]中找到一种方案使得对应起来

则f[i][0]=f[i][1]

之前我们得到

f[i][0]+f[i][1]=ans[i]

所以f[i][0]=f[i][1]=ans[i]/2;

具体见代码:

#include<bits/stdc++.h>
using namespace std;
long long A[25];
long long C[25][25];
long long f[25][2];
long long ans[25];
void init()
{A[0]=1;for(int i=1;i<=20;i++)A[i]=A[i-1]*i;C[0][0]=1;for(int i=1;i<=20;i++){C[i][0]=1;for(int j=1;j<=i;j++){C[i][j]=A[i]/A[i-j]/A[j];}}
}
int main()
{int t;init();scanf("%d",&t);f[0][0]=f[0][1]=1;ans[1]=1; f[1][0]=f[1][1]=1;ans[2]=2; f[2][0]=f[2][1]=1;for(int i=3;i<=20;i++){for(int j=0;j<=i;j++)ans[i]+=f[j][0]*f[i-j-1][1]*C[i-1][j];f[i][0]=f[i][1]=ans[i]/2;}while(t--){int a,n;scanf("%d%d",&a,&n);printf("%d %lld\n",a,ans[n]);}return 0;
}

The King's Ups and Downs UVALive - 6177相关推荐

  1. 6177 The King’s Ups and Downs(组合dp)

    欢迎访问https://blog.csdn.net/lxt_Lucia-- 宇宙第一小仙女\(^o^)/--萌量爆表求带飞=≡Σ((( つ^o^)つ~ dalao们点个关注呗-- ---------- ...

  2. HDU - 4489 The King’s Ups and Downs (排列组合+dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4489点击打开链接 The King's Ups and Downs Time Limit: 2000/ ...

  3. HDU 4489 The King’s Ups and Downs(组合DP)

    作者:Accagain 链接:点击打开链接 原题 The King's Ups and Downs Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...

  4. The King’s Ups and Downs (线性DP)

    The King's Ups and Downs (线性DP) [link](Problem - 4489 (dingbacode.com)) 题意 给你n个身高不同的人,问你这些人按照波浪形排列有多 ...

  5. HDU 4489 The King’s Ups and Downs 组合DP

    The King's Ups and Downs HDU - 4489 给一个整数 nnn,求 {1,⋯,n}\{1,\cdots,n\}{1,⋯,n} 符合以下条件的的排列数: 设 a1,⋯,ana ...

  6. HDU-4489-The King’s Ups and Downs

    HDU-4489-The King's Ups and Downs 这道题是一道组合dp=-=嘻嘻 传送门 怎么这么巧捏,我昨天刚刚写了个组合的代码跑概率论,结果今天就来了个组合dp,昨天还苦恼着组合 ...

  7. 【dp】The King‘s Ups and Downs

    题目描述:给一个n,求n个高矮不同的人排成一排使得高.矮依次排列的种数. 考虑状态转移,由于从n-1到n个人多增加了一个身高最高的人,又要求高矮依次排列,因此新加入的这个人只能放在前两个人为高矮,后两 ...

  8. UVA 6177 The King's Ups and Downs DP

    orz想了好久好久的排列组合,未果,考虑不全--DP好难啊233333 题目链接戳这里 抛开整体不考虑,我们来考虑一下第i位(k)的插入问题: 第i位>第i-1位时,插入条件为第i-1位< ...

  9. 中石油训练赛 - The King’s Ups and Downs(记忆化搜索)

    题目描述 The king has guards of all different heights. Rather than line them up in increasing or decreas ...

最新文章

  1. 有多个重载参数pow_面试深刨——150分面重载
  2. 吴志强院士:CIM与城市未来
  3. 2019.08.04 新建随笔
  4. ActionT和FuncT委托
  5. 【解题报告】Leecode 519. 随机翻转矩阵——Leecode每日一题系列
  6. 牙齿间隙变大怎么办_牙齿之间的间隙越来越大怎么办?
  7. 【Flink】Could not complete the operation,Number of retries has been exhausted
  8. Excel删除重复数据
  9. 打败 Python、JS、C# 成最受欢迎编程语言,是时候掌握 Rust 了吗?
  10. excel制作录入和查询系统_Excel进销存管理系统,完整函数应用,出入查询库存更新自动显示...
  11. Android InputType
  12. 小说阅读器java源代码_Android项目源码任阅小说阅读器高仿追书神器
  13. Java 游戏自动寻路,老游戏仙境传说RO私服自动寻路求交流(含代码)
  14. moviepy图片和文字合成视频
  15. 黑马Java学科资料
  16. 简单的水印制作之美图秀秀
  17. dex2jiar在压缩classes.dex的时候出现的问题
  18. 夜神安卓7导入charles证书
  19. c语言程序0xc0000005解决方案,应用程序无法正常启动0xc0000005如何解决
  20. 综述:用于自动驾驶的全景鱼眼相机的理论模型和感知介绍

热门文章

  1. L1-040 最适情侣身高差 (10 分)
  2. 想让照片更闪耀?20个金色光效景色Lightroom预设不能错过
  3. 功能安全-ISO26262硬件设计案例(ASIL等级计算)
  4. 异形魔方SQ1的暴力解法
  5. android恢复微信好友,微信 怎么找回删除的好友 androiddb
  6. 《深入理解Android 卷III》第八章深入理解Android壁纸(完整版)
  7. BlackBerry Pushmail介绍
  8. Sql Server数据库中创建视图
  9. 首次打开vue运行出错,error Expected linebreaks to be ‘CRLF‘ but found ‘LF‘ linebreak-style
  10. 《数据处理与知识发现》章节测验复习