[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 数据范围:略. 题解: 不会.... 看了题解觉得自己好傻逼啊
 
随机推荐
- PHP mysqli_fetch_lengths() 函数
			
mysqli_fetch_lengths() 函数返回结果集中的字段长度. <?php // 假定数据库用户名:root,密码:123456,数据库:RUNOOB $con=mysqli_con ...
 - PHP mysqli_num_fields() 函数
			
mysqli_num_fields() 函数返回结果集中字段(列)的数量. 语法 mysqli_num_fields(result); 参数 描述 result 必需.规定由 mysqli_query ...
 - C# Socket 编程 Sample
			
使用Socket通信的服务器端编程,熟悉了服务器端和客户端的通信流程,实现了收发信息.文件传送以及震动功能 服务器端先创建Socket,然后将其和本地ip地址以及端口号连接,也就是使用Bind方法,然 ...
 - python-解决pip安装速度慢的问题--豆瓣镜像
			
https://www.cnblogs.com/ZhangRuoXu/p/6370107.html https://blog.csdn.net/tianguiyuyu/article/details/ ...
 - pycharm同一目录下无法import其他文件
			
如图:会出现带有红色波浪线,但是确实有random_walk文件 解决方法: 在当前文件下,右键找到mark Directory as 然后选择source root,完工ok 再如图: 版权声明: ...
 - Codeforces 55D. Beautiful numbers(数位DP,离散化)
			
Codeforces 55D. Beautiful numbers 题意 求[L,R]区间内有多少个数满足:该数能被其每一位数字都整除(如12,24,15等). 思路 一开始以为是数位DP的水题,觉得 ...
 - django 快速实现注册(四)
			
一.创建项目与应用 #创建项目fnngj@fnngj-H24X:~/djpy$ django-admin.py startproject mysite3fnngj@fnngj-H24X:~/djpy ...
 - ps 证件照制作
			
自己制作证件照,再通过印鸽等服务打印邮寄,个人感觉还是比较方便实惠. 使用ps的定义图案和填充功能(ps精简版) 定义图案 1,打开1寸照片 2,图像=>图像大小,可选去掉约束比例 1寸:2.5 ...
 - react-redux学习初步总结
			
1.index.js文件中需要引入 a.React(把jsx编译到js需要调用一个函数, 这个函数在React叫React.createElement. 解答地址:https://segmentfau ...
 - LeetCode 229. 求众数 II(Majority Element II )
			
题目描述 给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素. 说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1). 示例 1: 输入: [3,2,3] 输出: ...