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

  • 大暴力

    图形排版 739B C++ 运行超时 50 运行超时 1.585MB
    1. #include "cstdio"
    2. #include "algorithm"
    3. using namespace std;
    4. typedef pair<int, int> PII;
    5. const int MAXN = ;
    6. const int INF = 0x3f3f3f3f;
    7. PII arr[MAXN];
    8. int n, m;
    9. int check(int id) {
    10. int k = n, cnt = , h = ;
    11. for (int i = ; i < m; i++) {
    12. if (i == id) {
    13. continue;
    14. }
    15. if (k > arr[i].first) {
    16. k -= arr[i].first;
    17. h = max(h, arr[i].second);
    18. } else {
    19. h = max(h, (arr[i].second * k - ) / arr[i].first + );
    20. k = n;
    21. cnt += h;
    22. h = ;
    23. }
    24. }
    25. if (h != ) {
    26. cnt += h;
    27. }
    28. return cnt;
    29. }
    30. int main() {
    31. scanf("%d%d", &n, &m);
    32. for (int i = ; i < m; i++) {
    33. scanf("%d%d", &arr[i].first, &arr[i].second);
    34. }
    35. int mn = INF;
    36. for (int i = ; i < m; i++) {
    37. mn = min(mn, check(i));
    38. }
    39. printf("%d\n", mn);
    40. return ;
    41. }

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

  • 预处理
    图形排版 1.300KB C++ 正确 100 62ms 2.070MB
    1. #include "cstdio"
    2. #include "iostream"
    3. #include "algorithm"
    4. using namespace std;
    5. typedef pair<int, int> PII;
    6. const int MAXN = ;
    7. const int INF = 0x3f3f3f3f;
    8. // 存n张图片,first为宽,second为高
    9. PII arr[MAXN];
    10. // 预处理,f[i]表示第i张图到第n张图需要的高度
    11. int f[MAXN];
    12. int n, m;
    13. // Add用于往一个行里加入第k张图片
    14. void Add(PII* p, int k) {
    15. if (p->first + arr[k].first < m) {
    16. p->first += arr[k].first;
    17. p->second = max(p->second, arr[k].second);
    18. } else {
    19. p->second = max(p->second, (arr[k].second * (m - p->first) - ) / arr[k].first + );
    20. p->first = m;
    21. }
    22. }
    23. int getF(PII p, int k) {
    24. while (k <= n && p.first < m) {
    25. Add(&p, k);
    26. k++;
    27. }
    28. // 因为已经求出f[k]了,所以k后面就不用再算了;
    29. return p.second + f[k];
    30. }
    31. int main() {
    32. scanf("%d%d", &m, &n);
    33. for (int i = ; i <= n; i++) {
    34. scanf("%d%d", &arr[i].first, &arr[i].second);
    35. }
    36. for (int i = n; i >= ; i--) {
    37. f[i] = getF(make_pair(, ), i);
    38. }
    39. // pre表示在now表示的行上面已经存在的高度;
    40. int pre = , res = INF;
    41. // now表示当前正在填充的行
    42. PII now = make_pair(, );
    43. for (int i = ; i <= n; i++) {
    44. res = min(res, pre + getF(now, i + ));
    45. Add(&now, i);
    46. if (now.first == m) {
    47. pre += now.second;
    48. now.first = now.second = ;
    49. }
    50. }
    51. printf("%d\n", res);
    52. return ;
    53. }

蓝桥杯-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. 吴裕雄--天生自然 PHP开发学习:Switch 语句

    <?php $favcolor="red"; switch ($favcolor) { case "red": echo "你喜欢的颜色是红色! ...

  2. 「不会」Min25筛

    大概的思路是把所有数分成质数和合数考虑 对于质数,必须找出一个很简单的完全积性函数和所求函数拟合 把所有数当做质数看待求个前缀和,然后再枚举合数的最小质因子把合数T掉 枚举到根号n,即可保证把n以内的 ...

  3. elasticsearch-填坑

    1.分页参数 ,start=(page-1)*size 2.高亮字段结果的处理方式 3.float类型参数从map中取出用double接收 4.结果封装需手动封装 package com.search ...

  4. Pythia:Facebook最新开源的视觉、语言多任务学习框架

    Facebook 发布了一个全新的多任务学习框架 Pythia,它基于 PyTorch 且可用于视觉和语言的联合任务.Pythia 是一种模块化的即插即用框架,数据科学家和机器学习开发者能快速构建.复 ...

  5. HDU 2444 The Accomodation of Students【二分图最大匹配问题】

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2444 题意:首先判断所有的人可不可以分成互不认识的两部分.如果可以分成 ,则求两部分最多相互认识的对数. ...

  6. php的date()函数判断今天是星期几

    d  月份中的第几天,有前导零的 2 位数字 01 到 31 D  星期中的第几天,文本表示,3 个字母 Mon 到 Sun j  月份中的第几天,没有前导零 1 到 31 l  ("L&q ...

  7. mod_rewrite是Apache的一个非常强大的功能

    mod_rewrite是Apache的一个非常强大的功能,它可以实现伪静态页面.下面我详细说说它的使用方法!对初学者很有用的哦! 1.检测Apache是否支持mod_rewrite 通过php提供的p ...

  8. Mac中制作USB系统启动盘

    .iso镜像文件转 .dmg文件 hdiutil convert -format UDRW -o linuxmint.dmg ~/Desktop/linuxmint-19-cinnamon-64bit ...

  9. liunx 常用操作(自用)

    Centos7解压文件 tar -zxvf 文件名[test.tar.gz] Centos7安装vim yum -y install vim* Centos7安装ifconfig yum instal ...

  10. springboot的http监控接口启动器的配置

    基于SpringBoot框架企业级应用系统开发全面实战()->03.07_http监控_recv.mp4 监控接口启动器 自定义监控接口启动器的配置 ====================== ...