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

题意 \(n\) 元素各有一个高度 \(h\) 和关键数字 \(b\) .求有多少个下标序列和高度序列,满足对任意 \(i\),\(j< i\) 且 \(h_j < h_i\)的 \(j\) 个数小于 \(b_i\) \(n \leq 1000\). 分析 因为只有比 \(i\) 高的元素才会影响 \(i\) ,所以考虑把所有元素按照高度降序排列. 下标序列 考虑每个元素插入之前的排列中,一共有 \(min(b_i,i)\) 种方案. 考虑相同高度的元素按照 \(b\) 的大小升序排列,这样能…
3193: [JLOI2013]地形生成 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 459  Solved: 223[Submit][Status][Discuss] Description     最近IK正在做关于地形建模的工作.其中一个工作阶段就是把一些山排列成一行.每座山都有各不相同的标号和高度.为了遵从一些设计上的要求,每座山都设置了一个关键数字,要求对于每座山,比它高且排列在它前面的其它山的数目必须少于它的关键数字.  显然满足要…
[JLOI2013]地形生成 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3193 题解: 这种求总排列的题,一种常规做法就是所有的元素按照某种排列方式然后一个一个往里插. 这个题就是从大到小排序这样,对后面的元素没有影响. 现在有一些相等的元素我们怎么弄? 如果是标号序列的话,就是瞎$jb$排就行了. 如果是等高线序列的话,只要按照$a$作为第二关键字就好. 代码: #include <bits/stdc++.h> #defin…
BZOJ3193 [JLOI2013]地形生成 Solution 第一问不是很简单吗? 直接计数就好了. 第二问思考无果看了看hyj神仙的代码,发现可以dp求解. 具体可以看代码(其实主要是我说不清楚...) 代码实现 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #include<algorithm> #include<queue>…
[BZOJ3193][JLOI2013]地形生成(动态规划) 题面 BZOJ 洛谷 题解 第一问不难,首先按照山的高度从大往小排序,这样子只需要抉择前面有几座山就好了.然而有高度相同的山.其实也不麻烦,把高度相同的山按照关键数字排序,这样子即使是高度相同的山,也可以变成多出位置可以放进来,只需要记录前面有多少高度相同的山就可以直接累乘了. 第二问其实也没什么,就是同高度的山要一起放,因为它们最终对于答案的贡献是相同的. 既然不能组合数直接计算答案,考虑\(dp\). 设\(f[i][j]\)表示…
[BZOJ3193][JLOI2013]地形生成 Description 最近IK正在做关于地形建模的工作.其中一个工作阶段就是把一些山排列成一行.每座山都有各不相同的标号和高度.为了遵从一些设计上的要求,每座山都设置了一个关键数字,要求对于每座山,比它高且排列在它前面的其它山的数目必须少于它的关键数字.  显然满足要求的排列会有很多个.对于每一个可能的排列,IK生成一个对应的标号序列和等高线序列.标号序列就是按顺序写下每座山的标号.等高线序列就是按顺序写下它们的高度.例如有两座山,这两座山的一…
第一问: 先不考虑山的高度有相同的:直接按照高度降序排序,试着将每一座山插入到前面山的缝隙中. 当然,这并不代表这些山的相对位置是固定的,因为后面高度更低的山是有机会插入进来的,所以就可以做到将所有情况都考虑到. 假设现在要插入第 $i$ 座山,前面已插入了 $i-1$ 座比当前山高的山,那么当前能插入的选择应该是 $min(key_{i},i)$ 种. (既然前面的山都高于第 $i$ 座,所以能且只能插入到这些位置上). 令 $f_{i}$ 表示从大到小插入了 $i$ 座山的方案数,则 $f_…
JLOI2013过了好长时间,才写第四题.. 第一问比较好想. 第二问我想到了n^3次方的做法,但是数据....于是没敢写,然后上网查了一下题解,居然是O(n^3)过的,数据这么弱... /* * Problem: JLOI2013-Terrain * Author: Shun Yao */ #include <string.h> #include <stdlib.h> #include <limits.h> #include <assert.h> #inc…
题目链接 BZOJ3193 题解 注意\(key\)是小于 第一问,显然按高度降序排序,逐个插入 如果高度各不相同,那么之前插入的都比当前插入的\(i\)大,可插入的位置个数就确定了 由于存在高度相同的情况,将key作为第二关键字升序排序 这样后面插入的就一定能插入前面插入的之后,统计一下之前插入了\(cnt\)个相同高度的,可插入的位置就加上\(cnt\) 第二问 如果高度各不相同,答案同第一问 否则要考虑相同高度带来的影响 分段\(dp\)计算每一段相同高度的贡献 我们默认\(key\)大的…
传送门 Sol 第一问可以考虑按照山的高度从大到小放 但是这样如果遇到高度相同的就不好考虑,那么同时要求数量限制从小到大 这样每次放的时候后面的一定不会影响前面,并且高度相同的时候前面能放的位置后面的也能放 直接乘起来就好了 对于第二问,此时高度相同的会有影响 对于高度相同的一段,强制要求数量限制从小到大,并且后面的位置必须小于前面 设 \(f_{i,j}\) 表示放了 \(i\) 个到 \(j\) 个空位,最后一个放的在最后,的方案数 那么 \(f_{i,j}=\sum_{k\le j}f_{…