图形排版[蓝桥杯]

题目描述

题目传送门
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题意理解

对于一张图片,在某一行中我们可以有两个操作:
1.当该图片的宽度<=当前行的宽度, 我们将其放入当前行
2.当该图片的宽度>当前行的宽度,我们将图片进行压缩,并放入当前行。从下一张图片开始,另起一行

以下是基于题目给的图片规格进行排版,计算总高度的过程
在这里插入图片描述
前三张图片可以顺次放在第一行,此时宽度剩下2
第四张图片规格较大,压缩后规格变为2 * 5,放在第一行
最终,第一行的高度为5
在这里插入图片描述
第五张图片开始,放在第二行
第五章图片规格较大, 进行压缩后为10 * 1,放在第二行
最终, 第二行的高度为1
在这里插入图片描述
从第六张图片开始放在第三行
第六、七张图片可顺次放在第三行
最终, 第三行高度为5
在这里插入图片描述
至此所有图片全部排版完成,总高度为每一行的高度之和,即5 + 1 + 5 = 11

方法一:枚举(不能全部通过)

思路

模拟每一张图片被删除的情况,计算每一种情况的总高度,取最小值

代码

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
typedef pair<int, int> PII;
vector<PII> g;
int n, m;
int solve(int x) //删掉下标为x的图片, 返回该情况下的高度
{
   
   
	int temp_m = m, height = 0, sum = 0;
	for(int i = 0; i < n; i ++)
	{
   
   
		if(i == x) continue; //模拟删掉下标为x的图片 
		if(temp_m > g[i].first) 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值