这是2017年蓝桥杯C组C++的压轴题,拿到之后没什么想法。但是蓝桥杯有部分分。所以直接敲了个大暴力提交上去过了一半的数据。后来想到了DP,但是没能实现出来,感觉还是有问题的。后来看了解题视频发现是预处理。

  • 大暴力

    图形排版 739B C++ 运行超时 50 运行超时 1.585MB
    #include "cstdio"
    #include "algorithm"
    using namespace std;
    typedef pair<int, int> PII;
    const int MAXN = ;
    const int INF = 0x3f3f3f3f;
    PII arr[MAXN];
    int n, m;
    int check(int id) {
    int k = n, cnt = , h = ;
    for (int i = ; i < m; i++) {
    if (i == id) {
    continue;
    }
    if (k > arr[i].first) {
    k -= arr[i].first;
    h = max(h, arr[i].second);
    } else {
    h = max(h, (arr[i].second * k - ) / arr[i].first + );
    k = n;
    cnt += h;
    h = ;
    }
    }
    if (h != ) {
    cnt += h;
    }
    return cnt;
    }
    int main() {
    scanf("%d%d", &n, &m);
    for (int i = ; i < m; i++) {
    scanf("%d%d", &arr[i].first, &arr[i].second);
    }
    int mn = INF;
    for (int i = ; i < m; i++) {
    mn = min(mn, check(i));
    }
    printf("%d\n", mn);
    return ;
    }

    比赛想不到后面的方法感觉这个方法也够了,毕竟我做到最后一题的时候时间已经不多了。

  • 预处理
    图形排版 1.300KB C++ 正确 100 62ms 2.070MB
    #include "cstdio"
    #include "iostream"
    #include "algorithm"
    using namespace std;
    typedef pair<int, int> PII;
    const int MAXN = ;
    const int INF = 0x3f3f3f3f;
    // 存n张图片,first为宽,second为高
    PII arr[MAXN];
    // 预处理,f[i]表示第i张图到第n张图需要的高度
    int f[MAXN];
    int n, m;
    // Add用于往一个行里加入第k张图片
    void Add(PII* p, int k) {
    if (p->first + arr[k].first < m) {
    p->first += arr[k].first;
    p->second = max(p->second, arr[k].second);
    } else {
    p->second = max(p->second, (arr[k].second * (m - p->first) - ) / arr[k].first + );
    p->first = m;
    }
    }
    int getF(PII p, int k) {
    while (k <= n && p.first < m) {
    Add(&p, k);
    k++;
    }
    // 因为已经求出f[k]了,所以k后面就不用再算了;
    return p.second + f[k];
    }
    int main() {
    scanf("%d%d", &m, &n);
    for (int i = ; i <= n; i++) {
    scanf("%d%d", &arr[i].first, &arr[i].second);
    }
    for (int i = n; i >= ; i--) {
    f[i] = getF(make_pair(, ), i);
    }
    // pre表示在now表示的行上面已经存在的高度;
    int pre = , res = INF;
    // now表示当前正在填充的行
    PII now = make_pair(, );
    for (int i = ; i <= n; i++) {
    res = min(res, pre + getF(now, i + ));
    Add(&now, i);
    if (now.first == m) {
    pre += now.second;
    now.first = now.second = ;
    }
    }
    printf("%d\n", res);
    return ;
    }

蓝桥杯-PREV45-图形排版的更多相关文章

  1. Java实现蓝桥杯打印图形

    标题:打印图形 如下的程序会在控制台绘制分形图(就是整体与局部自相似的图形). 当n=1,2,3的时候,输出如下: 请仔细分析程序,并填写划线部分缺少的代码. n=1时: o ooo o n=2时: ...

  2. Java实现第八届蓝桥杯图形排版

    标题:图形排版 小明需要在一篇文档中加入 N 张图片,其中第 i 张图片的宽度是 Wi,高度是 Hi. 假设纸张的宽度是 M,小明使用的文档编辑工具会用以下方式对图片进行自动排版: 1. 该工具会按照 ...

  3. 2012年 蓝桥杯预赛 java 本科 题目

    2012年 蓝桥杯预赛 java 本科 考生须知: l  考试时间为4小时. l  参赛选手切勿修改机器自动生成的[考生文件夹]的名称或删除任何自动生成的文件或目录,否则会干扰考试系统正确采集您的解答 ...

  4. 第八届蓝桥杯JavaB---承压计算

    标题:承压计算 X星球的高科技实验室中整齐地堆放着某批珍贵金属原料. 每块金属原料的外形.尺寸完全一致,但重量不同. 金属材料被严格地堆放成金字塔形. 7 5 8 7 8 8 9 2 7 2 8 1 ...

  5. 2018年蓝桥杯B组C/C++决赛题目

    自己的博客排版,自我感觉略好一点. 先放上题目. 点击查看2018年蓝桥杯B组C/C++决赛题目题解     1.换零钞 x星球的钞票的面额只有:100元,5元,2元,1元,共4种. 小明去x星旅游, ...

  6. [算法竞赛][2018][蓝桥杯][LanqiaoCA]第九届蓝桥杯A组

    题目1 标题:分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + .... 每项是前一项的一半,如果一共有20项,求这个和是多少,结果用分数表示出来.类似:3/2当然,这只是加了前2项 ...

  7. 第四届蓝桥杯JavaC组省赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.猜年龄 题目描述 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学.他曾在1935~1936年应邀来中国清华大学讲学. 一 ...

  8. 第九届蓝桥杯JavaC组省赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.哪天返回 题目描述 小明被不明势力劫持.后被扔到x星站再无问津.小明得知每天都有飞船飞往地球,但需要108元的船票,而他却身无分文. ...

  9. 第九届蓝桥杯JavaA组省赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.分数 题目描述 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + - 每项是前一项的一半,如果一共有20项, 求这个和是多 ...

随机推荐

  1. LeetCode No.166,167,168

    No.166 FractionToDecimal 分数到小数 题目 给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数. 如果小数部分为循环小数 ...

  2. redis(一)----配置及安装

    1. redis下载         根据自己操作系统平台下载适合的文件包: https://github.com/MSOpenTech/redis 2. redis安装         (1)解压, ...

  3. alert(1&&2)的输出问题

    此文章转载自http://blog.csdn.net/xiaotao_css/article/details/61940664 一.先来说说 ||(逻辑或),从字面上来说,只有前后都是false的时候 ...

  4. 阿里云服务器下安装配置phpMyAdmin

    1.下载phpMyAdmin wget http://www.phpmyadmin.net/home_page/downloads.php 2.解压下载的文件 tar -zvxf phpMyAdmin ...

  5. linux的centos设置静态网络

    这个是该自己的网络排至,具体的分析,自己以后再研究 http://www.centoscn.com/CentOS/config/2015/0227/4753.html

  6. PAT Basic 1023 组个最⼩数 (20) [贪⼼算法]

    题目 给定数字0-9各若⼲个.你可以以任意顺序排列这些数字,但必须全部使⽤.⽬标是使得最后得到的数尽可能⼩(注意0不能做⾸位).例如:给定两个0,两个1,三个5,⼀个8,我们得到的最⼩的数就是1001 ...

  7. java8新特性-函数式接口详细讲解及案例

    一.函数式接口 1.1 概念 函数式接口在Java中是指:有且仅有一个抽象方法的接口.函数式接口,即适用于函数式编程场景的接口.而Java中的函数式编程体现就是Lambda,所以函数式接口就是可 以适 ...

  8. drf偏移分页组件-游标分页-自定义过滤器-过滤器插件django-filter

    drf偏移分页组件 LimitOffsetPagination 源码分析:获取参数 pahenations.py from rest_framework.pagination import Limit ...

  9. drf三大认证:认证组件-权限组件-权限六表-自定义认证组件的使用

    三大认证工作原理简介 认证.权限.频率 源码分析: from rest_framework.views import APIView 源码分析入口: 内部的三大认证方法封装: 三大组件的原理分析: 权 ...

  10. oracle 学习(三)pl/sql语言函数

    系统内置函数 数学运算函数 字符串函数 统计函数 日期函数 用户定义函数:存储在数据库中的代码块,可以把值返回到调用程序.调用时如同系统函数一样 参数模式 IN模式:表示该参数时输入给函数的参数 OU ...