传送门

Sol

第一问可以考虑按照山的高度从大到小放

但是这样如果遇到高度相同的就不好考虑,那么同时要求数量限制从小到大

这样每次放的时候后面的一定不会影响前面,并且高度相同的时候前面能放的位置后面的也能放

直接乘起来就好了

对于第二问,此时高度相同的会有影响

对于高度相同的一段,强制要求数量限制从小到大,并且后面的位置必须小于前面

设 \(f_{i,j}\) 表示放了 \(i\) 个到 \(j\) 个空位,最后一个放的在最后,的方案数

那么 \(f_{i,j}=\sum_{k\le j}f_{i-1,k}\)

前缀和优化即可,最后把答案乘起来

# include <bits/stdc++.h>
using namespace std;
typedef long long ll; const int maxn(1005);
const int mod(2011); struct Hill {
int h, c; inline bool operator < (Hill b) const {
return (h ^ b.h) ? h > b.h : c < b.c;
}
} h[maxn]; int n, f[maxn][maxn]; inline int Solve(int l, int r) {
register int i, j, len = r - l + 1;
for (i = 0; i <= len; ++i)
for (j = 0; j <= l; ++j) f[i][j] = 0;
for (i = 1; i <= l; ++i) f[0][i] = 1;
for (i = 1; i <= len; ++i) {
for (j = 1; j <= min(l, h[i + l - 1].c); ++j) f[i][j] = f[i - 1][j];
for (j = 1; j <= l; ++j) f[i][j] = (f[i][j] + f[i][j - 1]) % mod;
}
return f[len][l];
} int main() {
register int i, c, ans;
scanf("%d", &n);
for (i = 1; i <= n; ++i) scanf("%d%d", &h[i].h, &h[i].c);
sort(h + 1, h + n + 1);
for (ans = 1, i = 2, c = 0; i <= n; ++i) {
c = h[i].h == h[i - 1].h ? c + 1 : 0;
ans = ans * min(i, h[i].c + c) % mod;
}
printf("%d ", ans);
for (ans = 1, i = 1, c = 0; i <= n; ++i)
if (i == n || h[i].h != h[i + 1].h) ans = ans * Solve(i - c, i) % mod, c = 0;
else ++c;
printf("%d\n", ans);
return 0;
}

BZOJ3193: [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]地形生成 【dp】

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

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

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

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

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

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

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

  7. [JLOI2013]地形生成

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

  8. [JLOI2013]地形生成[组合计数]

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

  9. luoguP3255 [JLOI2013]地形生成 动态规划

    出题人语文真好... 各不相同的标号和高度 = 各不相同的标号 + 单独的高度... 第一问比较简单,考虑从大到小插入,在相同情况下,按关键值从小到大插入 这样子,关键大的元素一定会影响到关键小的元素 ...

随机推荐

  1. IIFE格式js写法

    创建 加载文件方法 输出方法 方法书写 输出自定义变量 完整写法

  2. iOS学习笔记(7)——解析json中的中文

    NSURL *url = [NSURL URLWithString:@"http://nycode.sinaapp.com/d.php"]; NSError *error = ni ...

  3. 2016级算法期末上机-H.难题·AlvinZH's Fight with DDLs III

    1119 AlvinZH's Fight with DDLs III 思路 难题,最小点覆盖. 分析题意,某一个任务,既可以在笔记本A的 \(a\) 模式下完成,也可以在笔记本B的 \(b\) 模式下 ...

  4. 2016级算法第六次上机-E.Bamboo之吃我一拳

    Bamboo之吃我一拳 分析 当两个点的距离<=d时,才可以出拳,想要使得满足出拳条件的点对最少但不为0 寻找最近点对距离,得到的最近距离能够使得可以出拳的组数最少,因为除了最近点对外其他组合均 ...

  5. (一)Audio子系统之AudioRecord.getMinBufferSize

    在文章<基于Allwinner的Audio子系统分析(Android-5.1)>中已经介绍了Audio的系统架构以及应用层调用的流程,接下来,继续分析AudioRecorder方法中的ge ...

  6. mysql启动不起来

    在刚编译安装完成mysql,启动mysql时报了下面错误: /etc/init.d/mysqld start Starting MySQL... ERROR! The server quit with ...

  7. c# SocketAsyncEventArgs类的使用 IOCP服务器

    要编写高性能的Socket服务器,为每个接收的Socket分配独立的处理线程的做法是不可取的,当连接数量很庞大时,服务器根本无法应付.要响应庞大的连接数量,需要使用IOCP(完成端口)来撤换并处理响应 ...

  8. OpenERP 干掉 产品计量单位中的 search more 和 create and edit

    实际操作中特别容易点错而新建了重复的单位,通过下边的方法可以将“search more”和 “create and edit”干掉 在新继承product.product的模块中,修改xml文件 这样 ...

  9. (转)ELK Stack 中文指南--性能优化

    https://www.bookstack.cn/read/ELKstack-guide-cn/elasticsearch-README.md https://blog.csdn.net/cjfeii ...

  10. 数据库主键ID生成策略

    前言: 系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,下面介绍一些常见的ID生成策略. Sequence ID UUID GUID COMB Snowflake 最开始的自增ID为了实现分库 ...