The King's Ups and Downs UVALive - 6177
看大佬的题解学到的
题目意思就是给你一个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相关推荐
- 6177 The King’s Ups and Downs(组合dp)
欢迎访问https://blog.csdn.net/lxt_Lucia-- 宇宙第一小仙女\(^o^)/--萌量爆表求带飞=≡Σ((( つ^o^)つ~ dalao们点个关注呗-- ---------- ...
- 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/ ...
- 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 ...
- The King’s Ups and Downs (线性DP)
The King's Ups and Downs (线性DP) [link](Problem - 4489 (dingbacode.com)) 题意 给你n个身高不同的人,问你这些人按照波浪形排列有多 ...
- 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 ...
- HDU-4489-The King’s Ups and Downs
HDU-4489-The King's Ups and Downs 这道题是一道组合dp=-=嘻嘻 传送门 怎么这么巧捏,我昨天刚刚写了个组合的代码跑概率论,结果今天就来了个组合dp,昨天还苦恼着组合 ...
- 【dp】The King‘s Ups and Downs
题目描述:给一个n,求n个高矮不同的人排成一排使得高.矮依次排列的种数. 考虑状态转移,由于从n-1到n个人多增加了一个身高最高的人,又要求高矮依次排列,因此新加入的这个人只能放在前两个人为高矮,后两 ...
- UVA 6177 The King's Ups and Downs DP
orz想了好久好久的排列组合,未果,考虑不全--DP好难啊233333 题目链接戳这里 抛开整体不考虑,我们来考虑一下第i位(k)的插入问题: 第i位>第i-1位时,插入条件为第i-1位< ...
- 中石油训练赛 - The King’s Ups and Downs(记忆化搜索)
题目描述 The king has guards of all different heights. Rather than line them up in increasing or decreas ...
最新文章
- 有多个重载参数pow_面试深刨——150分面重载
- 吴志强院士:CIM与城市未来
- 2019.08.04 新建随笔
- ActionT和FuncT委托
- 【解题报告】Leecode 519. 随机翻转矩阵——Leecode每日一题系列
- 牙齿间隙变大怎么办_牙齿之间的间隙越来越大怎么办?
- 【Flink】Could not complete the operation,Number of retries has been exhausted
- Excel删除重复数据
- 打败 Python、JS、C# 成最受欢迎编程语言,是时候掌握 Rust 了吗?
- excel制作录入和查询系统_Excel进销存管理系统,完整函数应用,出入查询库存更新自动显示...
- Android InputType
- 小说阅读器java源代码_Android项目源码任阅小说阅读器高仿追书神器
- Java 游戏自动寻路,老游戏仙境传说RO私服自动寻路求交流(含代码)
- moviepy图片和文字合成视频
- 黑马Java学科资料
- 简单的水印制作之美图秀秀
- dex2jiar在压缩classes.dex的时候出现的问题
- 夜神安卓7导入charles证书
- c语言程序0xc0000005解决方案,应用程序无法正常启动0xc0000005如何解决
- 综述:用于自动驾驶的全景鱼眼相机的理论模型和感知介绍
热门文章
- L1-040 最适情侣身高差 (10 分)
- 想让照片更闪耀?20个金色光效景色Lightroom预设不能错过
- 功能安全-ISO26262硬件设计案例(ASIL等级计算)
- 异形魔方SQ1的暴力解法
- android恢复微信好友,微信 怎么找回删除的好友 androiddb
- 《深入理解Android 卷III》第八章深入理解Android壁纸(完整版)
- BlackBerry Pushmail介绍
- Sql Server数据库中创建视图
- 首次打开vue运行出错,error Expected linebreaks to be ‘CRLF‘ but found ‘LF‘ linebreak-style
- 《数据处理与知识发现》章节测验复习