UVa 1638 Pole Arrangement (递推或DP)
题意:有高为1,2,3...n的杆子各一根排成一行,从左边能看到L根,从右边能看到R根,求杆子的排列有多少种可能。
析:设d(i, j, k)表示高度为1-i的杆子排成一行,从左边看到j根,从右边看到k根的数目。当i>1时,我们按照从大到小的顺序按排杆子,
假设已经安排完i-1根了,那么还剩下一根就是高度为1的了,那么它放在哪都不会挡住任何一根杆子。情况有3种:
1.放在左边,那么在左边一定能够看到它,在右边看不到(因为i>1);
2.放在右边,那么在右边一定能够看到它,在左边看不到(因为i>1);
3.剩下的也就是放在中间了,那么我们有多少个地方可以放呢,答案很明显,i-2个,在左右两边都看不到它。
情况1时,在高度在2-i的杆子中,在左边能看到j-1根,从右边能看到k根,因为在左边加上第一根正好是j根,
同理,情况2,在高度在2-i的杆子中,在左边能看到j根,从右边能看到k-1根,因为在右边加上第一根正好是k根,
情况3呢?更好说,在高度在2-i的杆子中,在左边能看到j根,从右边能看到k根,因为在左边和右边都看不到第一根。
综上分析:d(i, j, k) = d(i-1, j-1, k) + d(i-1, j, k-1) + d(i-1, j, k) * (i-2),边界为d(1, 1 ,1) = 1;
可先把所以情况先扫出来,到时直接查询就行了,快捷方便。注意超过int了,要用long long存储。
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#define mod %10056 using namespace std;
typedef long long LL;
LL d[25][25][25]; void init(){
memset(d, 0, sizeof(d));
d[1][1][1] = 1;
for(int i = 2; i <= 20; ++i)
for(int j = 1; j <= 20; ++j)
for(int k = 1; k <= 20; ++k)
d[i][j][k] = d[i-1][j-1][k] + d[i-1][j][k-1] + d[i-1][j][k] * (i-2);
} int main(){
init();
int T, n, l, r; cin >> T;
while(T--){
scanf("%d %d %d", &n, &l, &r);
printf("%lld\n", d[n][l][r]);
}
return 0;
}
UVa 1638 Pole Arrangement (递推或DP)的更多相关文章
- UVa 1638 Pole Arrangement【递推】
题意:给出n根高度为1,2,3,---n的杆子,从左边能看到l根,右边能够看到r根,问有多少种可能 看的紫书的思路 先假设已经安排好了高度为2---i的杆子, 那么高度为1的杆子的放置方法有三种情况 ...
- UVa 1638 - Pole Arrangement(dp)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA 1638 Pole Arrangement (dp)
题意:有n个长度为1到n的柱子排列在一起,从左边看有l根从右边看有r根,问你所以排列中满足这种情况的方案数 题解:就是一个dp问题,关键是下标放什么,值代表什么 使用三维dp,dp[i][j][k]= ...
- UVA 1638 Pole Arrangement
https://vjudge.net/problem/UVA-1638 题意: n根长度分别为1,2,3,4……n的木棍 将这些木棍竖着排成一列 问从左边看能看到L根,从右边看能看到R根的方案数 将木 ...
- [Codeforces676B]Pyramid of Glasses(递推,DP)
题目链接:http://codeforces.com/problemset/problem/676/B 递推,dp(i, j)表示第i层第j个杯子,从第一层开始向下倒,和数塔一样的题.每个杯子1个时间 ...
- 算法技巧讲解》关于对于递推形DP的前缀和优化
这是在2016在长沙集训的第三天,一位学长讲解了“前缀和优化”这一技巧,并且他这一方法用的很6,个人觉得很有学习的必要. 这一技巧能使线性递推形DP的速度有着飞跃性的提升,从O(N2)优化到O(N)也 ...
- Uva 10446【递推,dp】
UVa 10446 求(n,bcak)递归次数.自己推出来了一个式子: 其实就是这个式子,但是不知道该怎么写,怕递归写法超时.其实直接递推就好,边界条件易得C(0,back)=1.C(1,back)= ...
- UVA 10288 - Coupons(概率递推)
UVA 10288 - Coupons option=com_onlinejudge&Itemid=8&page=show_problem&category=482&p ...
- openjudge1768 最大子矩阵[二维前缀和or递推|DP]
总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的 ...
随机推荐
- 基于OpenGL编写一个简易的2D渲染框架-05 渲染文本
阅读文章前需要了解的知识:文本渲染 https://learnopengl-cn.github.io/06%20In%20Practice/02%20Text%20Rendering/ 简要步骤: 获 ...
- UI5-文档-4.6-Modules
在SAPUI5中,资源通常被称为模块.在这一步中,我们将上次练习中的警报替换为sap.m库中的适当消息Toast.所需的模块可以异步加载. Preview A message toast displa ...
- 锋利的BFC
在初学前端的时候,我们会经常碰到各种各样的布局问题,尤其当使用浮动的时候,然而学习了BFC之后,其中的一些怪异现象,也因此成为理所当然,会有一种拨开云雾的快感. 下面简单介绍下BFC,究竟什么是BFC ...
- nmap扫描工具
1.NMap工具 主要功能:探测主机是否在线.扫描主机开放端口和嗅探网络服务,用于网络探测和安全扫描. NMap支持很多扫描技术,例如:UDP.TCPconnect().TCPSYN(半开扫描).ft ...
- Null value was assigned to a property of primitive type setter of"原因及解决方法
在action请求数据的过程中报出"Null value was assigned to a property of primitive type setter of"错误,搜索之 ...
- Functional Java 学习笔记
Functional Java Functional Java是一个在Java语言中实现函数型编程范式的类库. 从接口上看,该类库似乎与Haskell语言关系密切,接口的方法名很多来自该语言. < ...
- conductor介绍
https://netflix.github.io/conductor/ https://github.com/Netflix/conductor 编译版: https://jcenter.bintr ...
- linux一些基本常识(三)
acl:对本身权限的扩展 打包:zip 111.zip a.txt b.txt..... zip -r /etc/sysconfig/* (样才能第归所有内容0) 解宝:uzip 1 ...
- blat
1) 产生背景---------------------------------------------------2002年的时候,随着人类基因组项目不断推进,需要将大量ESTs(300万) 及m ...
- function方法控制是否隐藏部分内容
$(document).ready(function() { $('input[type=radio][name=IE]').change(function() { if (this.value == ...