UVa1588(算法竞赛第二版习题3-11)
题目描述:给出两个长度为 n1,n2(n1,n2≤100)n_1,n_2(n_1,n_2 \le 100)n1,n2(n1,n2≤100)且每列高度只为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 3≤3就取到值,当然注意可以固定底部也可以固定顶部,两者得到的容器长度可能不一样取最小值
代码:
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int get_len(string, string)

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

被折叠的 条评论
为什么被折叠?



