很遗憾,这么好的一道题,自己没想出来,也许太心急了吧。

题意:

有长度为1、2、3...n的n个杆子排成一行。问从左到右看能看到l个杆子,从右往左看能看到r个杆子,有多少种排列方法。

分析:

设状态d(i, j, k)表示i(i≥2)个长度各不相同的杆子,从左往右看能看到j个杆子,从右往左看能看到k个杆子的排列方法。现在假设除了最短的那个杆子,其他i-1个杆子的位置都已排好。那么考虑最短的杆子的位置,有三种决策:

  • 将最短的放到最左边,这样左视图中看到的杆子数加一,右视图不变。
  • 将最短的放到最右边,这样右视图中看到的杆子数加一,左视图不变。
  • 将最短的放在中间,这样从左侧或者从右侧都不会被看到,共有i-2中放法。

因此状态转移方程为:d(i, j, k) = d(i-1, j-1, k) + d(i-1, j, k-1) + (i-2)*d(i-1, j, k) //分别对应三种决策

 #include <cstdio>
typedef long long LL;
const int maxn = ;
LL f[][][]; void Init()
{
f[][][] = ;
for(int i = ; i <= maxn; ++i)
for(int j = ; j <= i; ++j)
for(int k = ; j + k - <= i; ++k)
f[i][j][k] = f[i-][j-][k] + f[i-][j][k-] + (i-)*f[i-][j][k];
} int main()
{
Init();
int T;
scanf("%d", &T);
while(T--)
{
int n, l, r;
scanf("%d%d%d", &n, &l, &r);
printf("%lld\n", f[n][l][r]);
} return ;
}

代码君

最新文章

  1. ios app的版本号
  2. LeetCode 解题报告索引
  3. JavaScript : 基本的处理事件
  4. flask-cors 实现跨域请求
  5. 两个由于php.ini配置错误导致的报错:ajax图片上传报错和exec报错
  6. border和outline区别
  7. Java学习笔记——可视化Swing中JTable控件绑定SQL数据源的两种方法
  8. mvn 一些操作
  9. Application的多种值判断测试程序
  10. AngularJS的this详解
  11. Java虚拟机面试重点-------------内存分配和回收策略
  12. centos7安装nodejs
  13. dedecms后台系统基本参数标题
  14. python 爬虫(一) requests+BeautifulSoup 爬取简单网页代码示例
  15. 洛谷 P1605 迷宫
  16. luogu4162 最长距离 (dijkstra)
  17. Python scrapy爬取带验证码的列表数据
  18. 大数据新手之路四:联合使用Flume和Kafka
  19. 我们一起学习WCF 第六篇文件传输
  20. HTML背景图片自适应

热门文章

  1. 详解HTML5中的&lt;aside&gt;元素与&lt;article&gt;元素
  2. Codeforces Round #362 (Div. 2)-&gt;B. Barnicle
  3. 把eclipse&quot;中文版&quot;变成&quot;英文版&quot;
  4. 物理地址 = 段地址*10H + 偏移地址
  5. mysql导出多个表数据为excel方法,substring函数查询
  6. DIY Ruby CPU 分析——Part I
  7. POJ 2155 Matrix (二维线段树入门,成段更新,单点查询 / 二维树状数组,区间更新,单点查询)
  8. ZOJ 1642 Match for Bonus (DP)
  9. ORA-04052\ ORA-00604\ORA-12154
  10. lintcode 中等题:Submatrix sum is 0 和为零的子矩阵