BZOJ3193: [JLOI2013]地形生成
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]地形生成的更多相关文章
- [Bzoj3193][JLOI2013]地形生成 (排列组合 + DP)
3193: [JLOI2013]地形生成 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 459 Solved: 223[Submit][Status ...
- [bzoj3193][JLOI2013]地形生成_排列组合_贪心
[JLOI2013]地形生成 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3193 题解: 这种求总排列的题,一种常规做法就是所有的元素 ...
- BZOJ3193 [JLOI2013]地形生成 【dp】
题目链接 BZOJ3193 题解 注意\(key\)是小于 第一问,显然按高度降序排序,逐个插入 如果高度各不相同,那么之前插入的都比当前插入的\(i\)大,可插入的位置个数就确定了 由于存在高度相同 ...
- 【BZOJ3193】 [JLOI2013]地形生成
BZOJ3193 [JLOI2013]地形生成 Solution 第一问不是很简单吗? 直接计数就好了. 第二问思考无果看了看hyj神仙的代码,发现可以dp求解. 具体可以看代码(其实主要是我说不清楚 ...
- 【BZOJ3193】[JLOI2013]地形生成(动态规划)
[BZOJ3193][JLOI2013]地形生成(动态规划) 题面 BZOJ 洛谷 题解 第一问不难,首先按照山的高度从大往小排序,这样子只需要抉择前面有几座山就好了.然而有高度相同的山.其实也不麻烦 ...
- 【BZOJ3193】[JLOI2013]地形生成 DP
[BZOJ3193][JLOI2013]地形生成 Description 最近IK正在做关于地形建模的工作.其中一个工作阶段就是把一些山排列成一行.每座山都有各不相同的标号和高度.为了遵从一些设计上的 ...
- [JLOI2013]地形生成
JLOI2013过了好长时间,才写第四题.. 第一问比较好想. 第二问我想到了n^3次方的做法,但是数据....于是没敢写,然后上网查了一下题解,居然是O(n^3)过的,数据这么弱... /* * P ...
- [JLOI2013]地形生成[组合计数]
题意 \(n\) 元素各有一个高度 \(h\) 和关键数字 \(b\) .求有多少个下标序列和高度序列,满足对任意 \(i\),\(j< i\) 且 \(h_j < h_i\)的 \(j\ ...
- luoguP3255 [JLOI2013]地形生成 动态规划
出题人语文真好... 各不相同的标号和高度 = 各不相同的标号 + 单独的高度... 第一问比较简单,考虑从大到小插入,在相同情况下,按关键值从小到大插入 这样子,关键大的元素一定会影响到关键小的元素 ...
随机推荐
- Flowportal-BPM——环境配置
环境配置: 一.控制面板→程序和功能→打开或不关闭Window功能→选择选项 二.控制面板→管理工具→Internet信息服务(IIS)管理器→左侧第一个→ISAPI和CGI限制→全部选为[允许] 三 ...
- 使用selenium的WebDriver和ChromeDriver实现UI自动化
下载chromedriver chromedriver与chrome的对应关系表:http://blog.csdn.net/huilan_same/article/details/51896672 下 ...
- css元素垂直居中的8中方法
1. 通过vertical-align:middle实现CSS垂直居中 通过vertical-align:middle实现CSS垂直居中是最常使用的方法,但是有一点需要格外注意,vertical生效的 ...
- SuperMap(无对应字段)空间属性挂接
一.数据准备 将一个没有基本属性的模型数据集和一个含有位置等属性信息的shp属性表进行挂接,两组数据之间没有连接字段,但同属一个坐标系下,只能通过空间位置信息进行属性挂接. 二.数据处理 基本思路:将 ...
- docker 磁盘清理 相关
用户在使用 Docker 部署业务一段时间后,可能会发现宿主节点的磁盘容量持续增长,甚至将磁盘空间耗尽进而引发宿主机异常,进而对业务造成影响. 本文先对 Docker 的空间分析与清理进行说明,然后对 ...
- 【算法笔记】A1039 Course List for Student
https://pintia.cn/problem-sets/994805342720868352/problems/994805447855292416 题意: 有N个学生,K节课.给出选择每门课的 ...
- android中画弧函数canvas.drawArc()之理解
在学习android中图形图像处理技术这部分内容时,对绘制圆弧函数canvas.drawArc()的用法.参数含义及画图原理很是不理解,在网上搜索了一些,加上自己的理解,在此做个小总结,作为学习过程中 ...
- hibernate关联关系的crud之级联
cascade级联,只会影响CRUD的CUD,不会影响读取.不设置级联,从多的一方能读出一的一方,设了级联,从一的一方,默认也不能读出多的一方. 如果两个对象之间有关联,不管是一对多,多对一,单向还是 ...
- Django时间与时区设置问题
在Django的配置文件settings.py中,有两个配置参数是跟时间与时区有关的,分别是TIME_ZONE和USE_TZ 如果USE_TZ设置为True时,Django会使用系统默认设置的时区,即 ...
- 09 jdk1.5的并发容器:CopyOnWriteArrayList(转载)
原文链接:http://ifeve.com/java-copy-on-write/ Copy-On-Write简称COW,是一种用于程序设计中的优化策略. 其基本思路是,从一开始大家都在共享同一个内容 ...