题意

\(n\) 元素各有一个高度 \(h\) 和关键数字 \(b\) 。求有多少个下标序列和高度序列,满足对任意 \(i\),\(j< i\) 且 \(h_j < h_i\)的 \(j\) 个数小于 \(b_i\)

  • \(n \leq 1000\).

分析

  • 因为只有比 \(i\) 高的元素才会影响 \(i\) ,所以考虑把所有元素按照高度降序排列。

  • 下标序列

    • 考虑每个元素插入之前的排列中,一共有 \(min(b_i,i)\) 种方案。

    • 考虑相同高度的元素按照 \(b\) 的大小升序排列,这样能够保证后放的元素一定可以放在先放的元素后面。

  • 高度序列

    • 做法类似之前,只是处理相同元素时要求每次要保证 每次放的位置 \(\geq\) 上一次放的位置
  • 总时间复杂度为 \(O(n^2)\) 。

处理组合计数问题的技巧:插入数字或者保留位置;

排列 \(\rightarrow\) 组合:强制放置有序即可;

代码

#include<bits/stdc++.h>
using namespace std;
#define go(u) for(int i=head[u],v=e[i].to;i;i=e[i].last,v=e[i].to)
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define pb push_back
typedef long long LL;
inline int gi(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-48;ch=getchar();}
return x*f;
}
template<typename T>inline bool Max(T &a,T b){return a<b?a=b,1:0;}
template<typename T>inline bool Min(T &a,T b){return b<a?a=b,1:0;}
const int N=1007,mod=2011;
void add(int &a,int b){a+=b;if(a>=mod) a-=mod;}
int n;
int ans1=1,ans2=1,f[N][N],s[N][N];
struct data{
int a,b;
data(){}data(int a,int b):a(a),b(b){}
bool operator <(const data &rhs)const{
if(a!=rhs.a) return a>rhs.a;
return b<rhs.b;
}
}v[N];
int main(){
n=gi();
rep(i,1,n) v[i].a=gi(),v[i].b=gi()-1;
sort(v+1,v+1+n);
for(int i=1,j=1;i<=n;i=j+1,j=i){
while(j+1<=n&&v[j+1].a==v[i].a) ++j;
rep(k,i,j) ans1=ans1*(min(v[k].b+1,i)+k-i)%mod;
}
for(int i=1,j=1;i<=n;i=j+1,j=i){
while(j+1<=n&&v[j+1].a==v[i].a) ++j; s[i-1][0]=1;
rep(z,1,i-1) s[i-1][z]=s[i-1][z-1]; rep(k,i,j)
for(int z=0;z<=i-1;++z){
s[k][z]=z?s[k][z-1]:0;
if(z<=v[k].b) add(s[k][z],s[k-1][z]);
}
ans2=ans2*(s[j][i-1])%mod;
}
printf("%d %d\n",ans1,ans2);
return 0;
}

[JLOI2013]地形生成[组合计数]的更多相关文章

  1. [Bzoj3193][JLOI2013]地形生成 (排列组合 + DP)

    3193: [JLOI2013]地形生成 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 459  Solved: 223[Submit][Status ...

  2. [bzoj3193][JLOI2013]地形生成_排列组合_贪心

    [JLOI2013]地形生成 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3193 题解: 这种求总排列的题,一种常规做法就是所有的元素 ...

  3. 【BZOJ3193】 [JLOI2013]地形生成

    BZOJ3193 [JLOI2013]地形生成 Solution 第一问不是很简单吗? 直接计数就好了. 第二问思考无果看了看hyj神仙的代码,发现可以dp求解. 具体可以看代码(其实主要是我说不清楚 ...

  4. 【BZOJ3193】[JLOI2013]地形生成(动态规划)

    [BZOJ3193][JLOI2013]地形生成(动态规划) 题面 BZOJ 洛谷 题解 第一问不难,首先按照山的高度从大往小排序,这样子只需要抉择前面有几座山就好了.然而有高度相同的山.其实也不麻烦 ...

  5. 【BZOJ3193】[JLOI2013]地形生成 DP

    [BZOJ3193][JLOI2013]地形生成 Description 最近IK正在做关于地形建模的工作.其中一个工作阶段就是把一些山排列成一行.每座山都有各不相同的标号和高度.为了遵从一些设计上的 ...

  6. BZOJ 3193: [JLOI2013]地形生成 计数 + 组合 + 动态规划

    第一问: 先不考虑山的高度有相同的:直接按照高度降序排序,试着将每一座山插入到前面山的缝隙中. 当然,这并不代表这些山的相对位置是固定的,因为后面高度更低的山是有机会插入进来的,所以就可以做到将所有情 ...

  7. [JLOI2013]地形生成

    JLOI2013过了好长时间,才写第四题.. 第一问比较好想. 第二问我想到了n^3次方的做法,但是数据....于是没敢写,然后上网查了一下题解,居然是O(n^3)过的,数据这么弱... /* * P ...

  8. BZOJ3193 [JLOI2013]地形生成 【dp】

    题目链接 BZOJ3193 题解 注意\(key\)是小于 第一问,显然按高度降序排序,逐个插入 如果高度各不相同,那么之前插入的都比当前插入的\(i\)大,可插入的位置个数就确定了 由于存在高度相同 ...

  9. BZOJ3193: [JLOI2013]地形生成

    传送门 Sol 第一问可以考虑按照山的高度从大到小放 但是这样如果遇到高度相同的就不好考虑,那么同时要求数量限制从小到大 这样每次放的时候后面的一定不会影响前面,并且高度相同的时候前面能放的位置后面的 ...

随机推荐

  1. [源码] YoCelsius

    YoCelsius 视频查看地址 苹果商店免费下载 最美应用介绍 源码地址     未完成的功能 [说明] 1. 本人写了几乎所有的显示控件与动画效果 2. 希望有人能喜欢,下载软件后给个好评 3. ...

  2. Python学习---Form拾遗180322

    Form操作之错误信息操作 1. 用户发送请求过来 2. for 循环对字段进行正则表达式的验证  fields.clean(value) 3. 自定义clean_字段() 进行名字段值正确性的校验 ...

  3. idea+maven+spring+cxf创建webservice应用(二)生成客户端程序

    idea+maven+spring+cxf创建webservice应用(二)生成客户端程序,以上一篇为基础"idea+maven+spring+cxf创建webservice应用" ...

  4. 【跨域】#001 JSONP原理解析【总结】

    一.JSONP 是什么? 1.1 概念 JSONP(JSON with Padding)是资料格式 JSON 的一种“使用模式”,可以让网页从别的网域要资料.由于同源策略,一般来说位于 server1 ...

  5. spring中MessageSource的配置使用方法2--ReloadableResourceBundleMessageSource【转】

    本文转载仅供自己学习收录,不做任何商业用途,如有需要可访问原地址:http://blog.csdn.net/qyf_5445/article/details/8124362 如何在spring mvc ...

  6. CSS3的新增边框属性

    一.CSS3 新增的边框属性 属性 版本 简介 border-image CSS3 设置或检索对象的边框使用图像来填充 border-image-source CSS3 设置或检索对象的边框是否用图像 ...

  7. 学习python第四天——Oracle分组

    1.分组的概念: 关键字:group by子句 结论:在select列表中如果出现了聚合函数,不是聚合函数的列,必须都要定义到group by子句的后面 需求: 查询公司各个部门的平均工资? sele ...

  8. 第五周:MySQL数据库

    首先,先了解一下数据库的基本概念要点: 数据库是数据存储的集合,表示数据结构化的信息 列存储表中的信息 行存储表的明细 主键是表中的唯一标识 主键不具备业务意义 在实际操作中,对表的主键不做强制性要求 ...

  9. SQLServer2008导出表数据为SQL脚本

    SQLServer2008的导出脚本方法: 数据库名-->右键 任务-->生存脚本 之后弹出SQLServer脚本生成向导 选择数据库 把编写数据可脚本这一项改为true,默认是false ...

  10. React 入门学习笔记2

    摘自阮一峰:React入门实例教程,转载请注明出处. 一.获取真实的DOM节点 组件并不是真实的 DOM 节点,而是存在于内存之中的一种数据结构,叫做虚拟 DOM (virtual DOM).只有当它 ...