UVa1588(换低档装置)

博客介绍了UVa1588算法竞赛题目,内容涉及如何找到使两个由1和2组成的字符串匹配的最短容器长度。通过将顶部木条视为一个单位向右移动,当每列数字上下相加不超过3时,就能找到合适的容器长度。文章提供了一个简单的思路,并给出了示例输入和输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UVa1588(算法竞赛第二版习题3-11)


题目描述:给出两个长度为 n1,n2(n1,n2≤100)n_1,n_2(n_1,n_2 \le 100)n1,n2(n1,n2100)且每列高度只为1或2的长条。需要将它们放入一个高为3的容器,问能够容纳它们的最短容器长度。

例如:
在这里插入图片描述
读入的数据对应:

2112112112
2212112

对应的最小容器(长度为10)
在这里插入图片描述
Input:读入数据直到EOF,偶数行,每两行代表一组数据,由1和2组成的字符串,代表每列的长度,第一行是底部的长条,第二行是顶部的长条
Output:对于每组数据,输出最短容器长度,占一行

Sample Input:

2112112112
2212112
12121212
21212121
2211221122
21212

Sample Out

10
8
15

思路:不妨将例题中容器写成1,2的两行字符串

2112112112
 2212112

可以理解为顶上的木条往右移动了一列,就恰好卡进去了,从字符串的角度来看,固定底部,顶部一列为单位移动,只要每一列数字上下相加≤3\le 33就取到值,当然注意可以固定底部也可以固定顶部,两者得到的容器长度可能不一样取最小值

代码:

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int get_len(string, string)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值