蓝桥杯-PREV45-图形排版
这是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-图形排版的更多相关文章
- Java实现蓝桥杯打印图形
标题:打印图形 如下的程序会在控制台绘制分形图(就是整体与局部自相似的图形). 当n=1,2,3的时候,输出如下: 请仔细分析程序,并填写划线部分缺少的代码. n=1时: o ooo o n=2时: ...
- Java实现第八届蓝桥杯图形排版
标题:图形排版 小明需要在一篇文档中加入 N 张图片,其中第 i 张图片的宽度是 Wi,高度是 Hi. 假设纸张的宽度是 M,小明使用的文档编辑工具会用以下方式对图片进行自动排版: 1. 该工具会按照 ...
- 2012年 蓝桥杯预赛 java 本科 题目
2012年 蓝桥杯预赛 java 本科 考生须知: l 考试时间为4小时. l 参赛选手切勿修改机器自动生成的[考生文件夹]的名称或删除任何自动生成的文件或目录,否则会干扰考试系统正确采集您的解答 ...
- 第八届蓝桥杯JavaB---承压计算
标题:承压计算 X星球的高科技实验室中整齐地堆放着某批珍贵金属原料. 每块金属原料的外形.尺寸完全一致,但重量不同. 金属材料被严格地堆放成金字塔形. 7 5 8 7 8 8 9 2 7 2 8 1 ...
- 2018年蓝桥杯B组C/C++决赛题目
自己的博客排版,自我感觉略好一点. 先放上题目. 点击查看2018年蓝桥杯B组C/C++决赛题目题解 1.换零钞 x星球的钞票的面额只有:100元,5元,2元,1元,共4种. 小明去x星旅游, ...
- [算法竞赛][2018][蓝桥杯][LanqiaoCA]第九届蓝桥杯A组
题目1 标题:分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + .... 每项是前一项的一半,如果一共有20项,求这个和是多少,结果用分数表示出来.类似:3/2当然,这只是加了前2项 ...
- 第四届蓝桥杯JavaC组省赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.猜年龄 题目描述 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学.他曾在1935~1936年应邀来中国清华大学讲学. 一 ...
- 第九届蓝桥杯JavaC组省赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.哪天返回 题目描述 小明被不明势力劫持.后被扔到x星站再无问津.小明得知每天都有飞船飞往地球,但需要108元的船票,而他却身无分文. ...
- 第九届蓝桥杯JavaA组省赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.分数 题目描述 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + - 每项是前一项的一半,如果一共有20项, 求这个和是多 ...
随机推荐
- faster rcnn 源码学习-------数据读入及RoIDataLayer相关模块解读
参考博客:::https://www.cnblogs.com/Dzhen/p/6845852.html 非常全面的解读参考:::https://blog.csdn.net/DaVinciL/artic ...
- Django2.0——请求与响应(下)
上篇讲完了请求,这篇接着讲下响应,django响应类型大致有以下几种 HttpResponse:返回简单的字符串 render:渲染模板 redirect:重定向 JsonResponse:返回jso ...
- Dynamics CRM - 如何创建一个新的 Organization
最近需要新建几个 CRM 的场来测试或者开发,也就是要新建 Organization,但是每次我都忘了在哪操作,写篇 blog mark 一下. 首先,新建 Organization 当然是要在 CR ...
- 38. docker cloud 简介及 关联 git hub
1.概念 提供 容器的管理, 编排, 部署 的托管服务 2.功能 image 管理 创建 stack 创建服务 service 添加 节点 作为 docker host 自动关联云服务商 AWS A ...
- LeetCode——623.在二叉树中增加一行
给定一个二叉树,根节点为第1层,深度为 1.在其第 d 层追加一行值为 v 的节点. 添加规则:给定一个深度值 d (正整数),针对深度为 d-1 层的每一非空节点 N,为 N 创建两个值为 v 的左 ...
- 在线公开课 | 5G时代的视频云服务关键技术与实践
5G时代来临在即,视频技术将会如何发展呢?基于视频云服务的技术开发又有怎样的变化呢?为此,京东云视频云产品研发部高级总监魏伟为大家做出了详细解读. 魏伟拥有10多年视频行业研发经验,先后从事于AVS标 ...
- Jupyer Notebook, Jupyter Lab 虚拟环境配置
虚拟环境 conda create -n python36 python=3.6 使用以下命令激活: activate python36 Notebook 安装插件 conda install nb_ ...
- python中os模块的常用方法
1.os模块:os模块在python中包含普遍的操作系统功能,下面列出了一些在os模块中比较有用的部分. os.sep可以取代操作系统特定的路径分隔符.windows下为 “\\” os.name字符 ...
- dubbo的启动时检查
修改的消费者(xml) 修改的消费者(注解)
- 八、Shell脚本高级编程实战第八部
一.使用for循环在/oldboy目录下创建10个文件名为oldboy-x的文件 #!/bin/sh[ ! -d /oldboy ] && mkdir -p /oldbfor i in ...