这是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. faster rcnn 源码学习-------数据读入及RoIDataLayer相关模块解读

    参考博客:::https://www.cnblogs.com/Dzhen/p/6845852.html 非常全面的解读参考:::https://blog.csdn.net/DaVinciL/artic ...

  2. Django2.0——请求与响应(下)

    上篇讲完了请求,这篇接着讲下响应,django响应类型大致有以下几种 HttpResponse:返回简单的字符串 render:渲染模板 redirect:重定向 JsonResponse:返回jso ...

  3. Dynamics CRM - 如何创建一个新的 Organization

    最近需要新建几个 CRM 的场来测试或者开发,也就是要新建 Organization,但是每次我都忘了在哪操作,写篇 blog mark 一下. 首先,新建 Organization 当然是要在 CR ...

  4. 38. docker cloud 简介及 关联 git hub

    1.概念 提供 容器的管理, 编排, 部署 的托管服务 2.功能 image 管理 创建 stack 创建服务 service 添加 节点 作为 docker host 自动关联云服务商 AWS  A ...

  5. LeetCode——623.在二叉树中增加一行

    给定一个二叉树,根节点为第1层,深度为 1.在其第 d 层追加一行值为 v 的节点. 添加规则:给定一个深度值 d (正整数),针对深度为 d-1 层的每一非空节点 N,为 N 创建两个值为 v 的左 ...

  6. 在线公开课 | 5G时代的视频云服务关键技术与实践

    5G时代来临在即,视频技术将会如何发展呢?基于视频云服务的技术开发又有怎样的变化呢?为此,京东云视频云产品研发部高级总监魏伟为大家做出了详细解读. 魏伟拥有10多年视频行业研发经验,先后从事于AVS标 ...

  7. Jupyer Notebook, Jupyter Lab 虚拟环境配置

    虚拟环境 conda create -n python36 python=3.6 使用以下命令激活: activate python36 Notebook 安装插件 conda install nb_ ...

  8. python中os模块的常用方法

    1.os模块:os模块在python中包含普遍的操作系统功能,下面列出了一些在os模块中比较有用的部分. os.sep可以取代操作系统特定的路径分隔符.windows下为 “\\” os.name字符 ...

  9. dubbo的启动时检查

    修改的消费者(xml) 修改的消费者(注解)

  10. 八、Shell脚本高级编程实战第八部

    一.使用for循环在/oldboy目录下创建10个文件名为oldboy-x的文件 #!/bin/sh[ ! -d /oldboy ] && mkdir -p /oldbfor i in ...