[bzoj3193][JLOI2013]地形生成_排列组合_贪心
[JLOI2013]地形生成
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3193
题解:
这种求总排列的题,一种常规做法就是所有的元素按照某种排列方式然后一个一个往里插。
这个题就是从大到小排序这样,对后面的元素没有影响。
现在有一些相等的元素我们怎么弄?
如果是标号序列的话,就是瞎$jb$排就行了。
如果是等高线序列的话,只要按照$a$作为第二关键字就好。
代码:
#include <bits/stdc++.h>
#define N 1010
using namespace std;
const int mod = 2011 ;
char *p1, *p2, buf[100000];
#define nc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1 ++ )
int rd() {
int x = 0, f = 1;
char c = nc();
while (c < 48) {
if (c == '-')
f = -1;
c = nc();
}
while (c > 47) {
x = (((x << 2) + x) << 1) + (c ^ 48), c = nc();
}
return x * f;
}
struct Node {
int h, rk;
}a[N];
int dp[N];
inline bool cmp(const Node &a, const Node &b) {
return a.h == b.h ? a.rk < b.rk : a.h > b.h;
}
int main() {
int n = rd();
for (int i = 1; i <= n; i ++ ) {
a[i].h = rd(), a[i].rk = rd() - 1;
}
int ans1 = 1, ans2 = 1;
sort(a + 1, a + n + 1, cmp);
for (int i = 1; i <= n; i ++ ) {
int dic = i;
while (dic <= n && a[dic].h == a[i].h) {
dic ++ ;
}
dic -- ;
memset(dp, 0, sizeof dp);
dp[0] = 1;
for (int j = i; j <= dic; j ++ ) {
ans1 = ans1 * (min(i, a[j].rk + 1) + j - i) % mod;
for (int k = 1; k <= min(a[j].rk, i - 1); k ++ ) {
dp[k] = (dp[k - 1] + dp[k]) % mod;
}
}
int sum = 0;
for (int j = 0; j <= min(a[dic].rk, i - 1); j ++ ) {
(sum += dp[j]) %= mod;
}
(ans2 *= sum) %= mod;
i = dic;
}
cout << ans1 << ' ' << ans2 << endl ;
return 0;
}
小结:记得,考虑问题的时候把当前时间戳这个容易忽略的变量也考虑进去,尽管大部分时候都用不到。
[bzoj3193][JLOI2013]地形生成_排列组合_贪心的更多相关文章
- [Bzoj3193][JLOI2013]地形生成 (排列组合 + DP)
3193: [JLOI2013]地形生成 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 459 Solved: 223[Submit][Status ...
- BZOJ3193 [JLOI2013]地形生成 【dp】
题目链接 BZOJ3193 题解 注意\(key\)是小于 第一问,显然按高度降序排序,逐个插入 如果高度各不相同,那么之前插入的都比当前插入的\(i\)大,可插入的位置个数就确定了 由于存在高度相同 ...
- BZOJ3193: [JLOI2013]地形生成
传送门 Sol 第一问可以考虑按照山的高度从大到小放 但是这样如果遇到高度相同的就不好考虑,那么同时要求数量限制从小到大 这样每次放的时候后面的一定不会影响前面,并且高度相同的时候前面能放的位置后面的 ...
- 【BZOJ3193】 [JLOI2013]地形生成
BZOJ3193 [JLOI2013]地形生成 Solution 第一问不是很简单吗? 直接计数就好了. 第二问思考无果看了看hyj神仙的代码,发现可以dp求解. 具体可以看代码(其实主要是我说不清楚 ...
- 【BZOJ3193】[JLOI2013]地形生成 DP
[BZOJ3193][JLOI2013]地形生成 Description 最近IK正在做关于地形建模的工作.其中一个工作阶段就是把一些山排列成一行.每座山都有各不相同的标号和高度.为了遵从一些设计上的 ...
- 【BZOJ3193】[JLOI2013]地形生成(动态规划)
[BZOJ3193][JLOI2013]地形生成(动态规划) 题面 BZOJ 洛谷 题解 第一问不难,首先按照山的高度从大往小排序,这样子只需要抉择前面有几座山就好了.然而有高度相同的山.其实也不麻烦 ...
- cb47a_c++_STL_算法_排列组合next_prev_permutation
cb47a_c++_STL_算法_排列组合next_prev_permutation 使用前必须先排序.必须是 1,2,3或者3,2,1.否者结果不准确.如果, 1,2,4,6.这样数据不会准确nex ...
- [JLOI2013]地形生成[组合计数]
题意 \(n\) 元素各有一个高度 \(h\) 和关键数字 \(b\) .求有多少个下标序列和高度序列,满足对任意 \(i\),\(j< i\) 且 \(h_j < h_i\)的 \(j\ ...
- [LuoguP2159][SHOI2009]舞会_动态规划_高精度_排列组合
舞会 题目链接:https://www.luogu.org/problem/P2159 数据范围:略. 题解: 不会.... 看了题解觉得自己好傻逼啊
随机推荐
- contents() 查找匹配元素内部所有的子节点(包括文本节点)。如果元素是一个iframe,则查找文档内容
contents() V1.2概述 查找匹配元素内部所有的子节点(包括文本节点).如果元素是一个iframe,则查找文档内容 示例 描述:大理石平台检定规程 查找所有文本节点并加粗 HTML 代码 ...
- java学习第一天:环境的配置
1.下载JDK,当前版本下载地址为:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.htm ...
- codeforces700B
CF700B Connecting Universities 题意翻译 树之王国是一个由n-1条双向路连接着n个城镇的国家,任意两个城镇间都是联通的. 在树之王国共有2k所大学坐落于不同的城镇之中. ...
- 第四章 Python数据分析-描述性分析
Python基础统计 统计函数:describe() 常用的统计指标函数: 统计函数 注释 (@数据分析-jacky) size 计算 sum 求和 mean 平均值 var 方差 std 标准差
- dos切换其他目录加参数/D
D:\>cd /D c:\Windows c:\Windows> 不加参数/D 无法切换到另一个盘符
- redis 数据类型详解 以及 redis适用场景场合(滴滴)
滴滴的面试官问了个问题关于redis的: 我现在想服务器每分钟接收一个用户的请求小于60个,如何处理: 答:使用Redis 缓存服务器,可以设置key=用户ID value不停地加一到了60就停止,然 ...
- sql 同一张表查询不同数据合并之后关联查询
SELECT t.articleId articleId, comments.`comments` parentComment, t.commentId commentsId, comments.`i ...
- Netfilter 之 连接跟踪钩子函数分析
ipv4_conntrack_defrag ipv4_conntrack_defrag对输入包进行检查,如果是分片包,则调用nf_ct_ipv4_gather_frags函数进行重组: static ...
- Python中二维数组的创建
习惯了java的Matrix = [][]不知道python怎么创二维数组. 先看 python中的二维数组操作 对最后提出的二维数组创建方式存在疑问 Matrix = [([0] * 3) for ...
- 图及其衍生算法(Graphs and graph algorithms)
1. 图的相关概念 树是一种特殊的图,相比树,图更能用来表示现实世界中的的实体,如路线图,网络节点图,课程体系图等,一旦能用图来描述实体,能模拟和解决一些非常复杂的任务.图的相关概念和词汇如下: 顶点 ...