链接:

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4513

题意:

有高为1, 2, 3,…, n的杆子各一根排成一行。从左边能看到L根,从右边能看到R根,求有多少种可能。

分析:

设d(i,j,k)表示让高度为1~i的杆子排成一行,从左边能看到j根,从右边能看到k根的方案数(设i≥2)。
按照从大到小的顺序安排各个杆子。假设已经安排完高度为2~i的杆子,
那么高度为1的杆子不管放哪里都不会挡住任何一根杆子。有如下3种情况。
情况1:插到最左边,则从左边能看到它,从右边看不见(因为i≥2)。
情况2:如果插到最右边,则从右边能看到它,从左边看不见。
情况3(有i-2个插入位置):插到中间,则不管从左边还是右边都看不见它。
在第一种情况下,高度为2~i的那些杆子必须满足:从左边能看到j-1根,从右边能看到k根,
因为只有这样,加上高度为1的杆子之后才是“从左边能看到j根,从右边能看到k根”。
虽然状态d(i,j,k)表示的是“让高度为1~i的杆子……”,而现在需要把高度为2~i+1的杆子排成一行,
但是不难发现:其实杆子的具体高度不会影响到结果,只要有i根高度各不相同的杆子,
从左从右看分别能看到j根和k根,方案数就是d(i,j,k)。换句话说,情况1对应的方案数是d(i-1,j-1,k)。
类似地,情况2对应的方案数是d(i-1,j,k-1),而情况3对应的方案数是d(i-1,j,k)*(i-2)。
这样,就得到了如下递推式:d(i,j,k) = d(i-1,j-1,k) + d(i-1,j,k-1) + d(i-1,j,k)*(i-2)。

代码:

  1. import java.io.*;
  2. import java.util.*;
  3.  
  4. public class Main {
  5. static final int UP = 20 + 1;
  6. static long d[][][] = new long[UP][UP][UP];
  7.  
  8. static void constant() {
  9. d[1][1][1] = 1;
  10. for(int n = 2; n < UP; n++) {
  11. for(int L = 1; L <= n; L++) {
  12. for(int R = 1; R <= n; R++) {
  13. d[n][L][R] += d[n-1][L-1][R];
  14. d[n][L][R] += d[n-1][L][R-1];
  15. d[n][L][R] += d[n-1][L][R] * (n-2);
  16. }
  17. }
  18. }
  19. }
  20.  
  21. public static void main(String args[]) {
  22. Scanner cin = new Scanner(new BufferedInputStream(System.in));
  23. constant();
  24.  
  25. int T = cin.nextInt();
  26. while(T --> 0) {
  27. int n = cin.nextInt();
  28. int L = cin.nextInt();
  29. int R = cin.nextInt();
  30. System.out.println(d[n][L][R]);
  31. }
  32. cin.close();
  33. }
  34. }

UVa 1638 - Pole Arrangement(dp)的更多相关文章

  1. UVA 1638 Pole Arrangement (dp)

    题意:有n个长度为1到n的柱子排列在一起,从左边看有l根从右边看有r根,问你所以排列中满足这种情况的方案数 题解:就是一个dp问题,关键是下标放什么,值代表什么 使用三维dp,dp[i][j][k]= ...

  2. UVa 1638 Pole Arrangement (递推或DP)

    题意:有高为1,2,3...n的杆子各一根排成一行,从左边能看到L根,从右边能看到R根,求杆子的排列有多少种可能. 析:设d(i, j, k)表示高度为1-i的杆子排成一行,从左边看到j根,从右边看到 ...

  3. uva 116 Unidirectional TSP (DP)

    uva 116 Unidirectional TSP Background Problems that require minimum paths through some domain appear ...

  4. UVa 12186 Another Crisis (DP)

    题意:有一个老板和n个员工,除了老板每个员工都有唯一的上司,老板编号为0,员工们为1-n,工人(没有下属的员工),要交一份请愿书, 但是不能跨级,当一个不是工人的员工接受到直系下属不少于T%的签字时, ...

  5. UVA 674 Coin Change(dp)

    UVA 674  Coin Change  解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730#problem/ ...

  6. UVA 10163 - Storage Keepers(dp)

    本文出自   http://blog.csdn.net/shuangde800 题目链接: 点击打开链接 题意 有n个仓库,让m个人来看管.一个仓库只能由一个人来看管,一个人可以看管多个仓库. 每个人 ...

  7. UVA 11137 Ingenuous Cubrency(dp)

    Ingenuous Cubrency 又是dp问题,我又想了2 30分钟,一点思路也没有,最后又是看的题解,哎,为什么我做dp的题这么烂啊! [题目链接]Ingenuous Cubrency [题目类 ...

  8. UVA 674 Coin Change (DP)

    Suppose there are 5 types of coins: 50-cent, 25-cent, 10-cent, 5-cent, and 1-cent. We want to make c ...

  9. uva 1629切蛋糕(dp)

    有一个n行m列的网格蛋糕,上面有一些樱桃.求使得每块蛋糕上都有一个樱桃的分割最小长度 思路:dp. #include<cstdio> #include<cstring> #in ...

随机推荐

  1. Centos7 ftp服务器搭建

    1.使用yum安装ftp服务端: yum install -y vsftpd 2.使用yum安装ftp客户端: yum install -y ftp.x86_64 3.开启ftp服务设置开机启动并查看 ...

  2. js事件绑定简单写法

    $E.on = function (o, e, f) { return o.addEventListener ? o.addEventListener(e, f, false) : o.attachE ...

  3. javax.el.PropertyNotFoundException: Property [name] not readable on type

    该错误为el表达式读取javaBean属性时报错. 如: {$user.name} 原因: javaBean Class访问权限不够 解决办法: 将javaBean Class设置为public即可 ...

  4. CXF - JAX-WS入门

    相关dependency,我使用的版本是2.7.11: <dependency> <groupId>org.apache.cxf</groupId> <art ...

  5. [转]what’s the difference between @Component ,@Repository & @Service annotations in Spring

    原文地址:https://www.cnblogs.com/softidea/p/6070314.html @Component is equivalent to <bean> @Servi ...

  6. 初学zookeeper--自定义事件监听

    zk有四种节点类型: 持久节点,持久顺序节点,临时节点,临时顺序节点. 自定义监听事件时,在节点的创建,修改,删除的方法第一行都需要加入是否监听的一个方法: //开启监听的方法.第二个参数表示是否开启 ...

  7. 三 Buffer

    使用Buffer一般遵循以下四个步骤 写入数据到Buffer 调用flip() 从Buffer中读取数据 调用clear()或者compact()方法 当向buffer写入数据时,buffer会记录下 ...

  8. 一台电脑上运行两个tomcat

    1.建立两个文件夹,tomcat1,tomcat2,分别在里面放入tomcat7文件(非安装版) 2.改配置 tomcat1中的配置就不用改了,直接用默认配置 tomcat2中的配置要改要,改conf ...

  9. IntelliJ IDEA16 热部署,解决每次修改java文件就得重启tomcat的问题

    这样就可以了....

  10. css-布局的漂浮

    float ** 属性值 left: 文本流向对象的右边 right:文本流向对象的左边 <html> <head> <title>World</title& ...