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)