http://acm.hdu.edu.cn/showproblem.php?pid=4372

题意:n个房子在一条线上(n<=2000),高度分别为1~n,现在需要将房子这样放置:从最左往右能看到F个房子,从最右往左能看到B个房子,能看到的条件是 两者之间的房子都要低于这个房子。问这样的方案数。

思路: 额,这个东西呢,想通了也就 很简单的啦。

n座塔,高度分别1~n,那 那个最高的不就从哪边看 都是能被看到的吗,我们就假设它的位置是固定的咯,我们假设这个最高的为塔n。 然后咧,题目要求   塔n的左边至少要有 f - 1 个递增的塔嘛,,右边就是 至少  b - 1 个 递减的啦,递增递减其实没什么所谓啦,知道是单调的就行了。   然后咧,我们 就 把 剩下的 n - 1 个数 分组  然后咧,分成  f - 1 + b - 1组, 然后就是 每组 至少一个元素,然后多的话呢,就用这组最高的塔 表示这一组 的高度。  然后咧,就 从 这 f - 1 + b - 1 个组中,取  f - 1 个放到 塔n的左边(组合数) 乘起来就是答案了。额,   n - 1 个数,分成   f - 1 + b - 1 的组,  那么 肯定能 保证 每个组的高度都是不一样的,那么 对于任意的 f - 1组,总存在唯一的 或者是单调递增的排列,或者是递减的排列。 对于剩下的  b - 1 组也是如此。  然后那个分组的其实就是  第一类 斯特林数 啦

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#define LL long long
#define ULL unsigned long long
#define rep(i,j,k) for(int i=j;i<=k;i++)
#define dep(i,j,k) for(int i=k;i>=j;i--)
#define INF 0x3f3f3f3f
#define mem(i,j) memset(i,j,sizeof(i))
#define make(i,j) make_pair(i,j)
#define pb push_back
using namespace std;
const int N = ;
const int mod = ;
LL c[N][N];
LL s1[N][N];
void init() {
c[][] = ;
rep(i, , N - ) {
c[i][] = c[i][i] = ;
s1[i][] = ; s1[i][i] = ;
rep(j, , i - ) {
c[i][j] = (c[i - ][j] % mod + c[i - ][j - ] % mod) % mod;
s1[i][j] =( (i - ) % mod * s1[i - ][j] % mod + s1[i - ][j - ] % mod ) % mod;
}
}
}
int main() {
init();
int t;
int n, f, b;
scanf("%d", &t);
while(t--) {
scanf("%d %d %d", &n, &f, &b);
if( f + b - > ) { puts(""); continue ; } ///你不特胖,那你就和我一起re三遍吧
LL ans = c[f + b - ][f - ] % mod * s1[n - ][f + b - ] % mod;
cout << ans <<endl;
}
return ;
}

Count the Buildings ( s1 )的更多相关文章

  1. HDU4372 Count the Buildings (+题解:斯特林数)

    题面 (笔者翻译) There are N buildings standing in a straight line in the City, numbered from 1 to N. The h ...

  2. HDU 4372 - Count the Buildings(组合计数)

    首先想过n^3的组合方法,即f(i,j,k)=f(i-1,j,k)*(i-2)+f(i-1,j-1,k)+f(i-1,j,k-1),肯定搞不定 然后想了好久没有效果,就去逛大神博客了,结果发现需要用到 ...

  3. 【HDU4372】Count the Buildings (第一类斯特林数)

    Description $N$座高楼,高度均不同且为$1~N$中的数,从前向后看能看到$F$个,从后向前看能看到$B$个,问有多少种可能的排列数. $T$组询问,答案模$1000000007$.其中$ ...

  4. CF451D Count Good Substrings (DP)

    Codeforces Round #258 (Div. 2) Count Good Substrings D. Count Good Substrings time limit per test 2 ...

  5. 2017年上海金马五校程序设计竞赛:Problem C : Count the Number (模拟)

    Description Given n numbers, your task is to insert '+' or '-' in front of each number to construct ...

  6. 【leetcode】Count and Say (easy)

    The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111221, ...

  7. hdu 4296 Buildings(贪婪)

    主题链接:http://acm.hdu.edu.cn/showproblem.php? pid=4296 Buildings Time Limit: 5000/2000 MS (Java/Others ...

  8. mysql练习----SUM and COUNT/zh图(二)

    世界国家概况 GROUP BY 和 HAVING 通过包括一个GROUP BY子句功能, SUM并将COUNT 其应用于共享值的项目组.当你指定 GROUP BY continent 结果是每个不同的 ...

  9. Leetcode 之Count and Say(35)

    很有意思的一道题,不好想啊. string getNext(string &s) { ]; ; stringstream ss; ; i < s.size(); i++) { if (s ...

随机推荐

  1. Glide优化

    几乎所有的 OOM 错误都是因为宿主应用出了问题,而不是 Glide 本身. 应用里两种常见的 OOM 错误分别是: 过大的内存分配 (Excessively large allocations) 内 ...

  2. 终身机器学习(Lifelong Machine Learning)综述

    终身机器学习(Lifelong Machine Learning)综述 2015年10月23日 17:34:57 qrlhl 阅读数 7805更多 分类专栏: 机器学习   版权声明:本文为博主原创文 ...

  3. C#面向对象16 访问修饰符

    C# 访问修饰符 public:公开的公共的 private:私有的,只能在内部类中访问 protected:受保护的,子类可以访问和类的内部 internal:只能在当前项目/程序集中访问.在同一项 ...

  4. MySQL 5.7.18 zip版本的安装使用方法

    转自:https://www.cnblogs.com/nepulgh/p/7152618.html MySQL 5.7.18 zip版本的安装使用方法 这个版本的MySQL不像那种点击就可以立即安装, ...

  5. JVM类加载机制和内存模型

    一.JVM类加载机制 首先需要了解一下类加载器(ClassLoader): ClassLoader是Java的一个核心组件,它主要作用是从系统外部获得Class二进制数据流,然后将数据流装载到系统,交 ...

  6. python3中SYS模块

    sys.argv               命令行参数List,第一个元素是程序本身路径sys.modules        返回系统导入的模块字段,key是模块名,value是模块sys.exit ...

  7. MySQL踩坑及MySQL解压版安装

    MySQL默认当前时间: MySQL5.5版本以下是不支持:datetime default now() 的,只能写成 timestamp default now() ; 而MySQL5.6以上是支持 ...

  8. fastadmin 页面添加编辑日期时间

    添加 <div class="form-group"> <label class="control-label col-xs-12 col-sm-2&q ...

  9. 如何解决Win10系统更新显示0x80080300代码的错误?

    Win10系统自推出以来就不断的在完善更新,其越来越丰富的功能也吸引了越来越多的用户.好系统Win10系统:https://www.vkebao.com/os/index_2.html但最近有用户反映 ...

  10. 解决GitLab的Forbidden和Nginx启动失败

    通过宝塔安装的GitLab突然出现Forbidden,原因居然是IP并发过大,IP被禁 解决方法: 登录服务器,编辑文件 /etc/gitlab/gitlab.rb  ,将下面的截图内容放开注释(默认 ...