题目链接https://vjudge.net/problem/UVA-1588
题意:给出两个长度分别为n1,n2(n1,n2≤100)且每列高度只为1或2的长条。需要将它们放入一个高度为3的容器(如图所示),问能够容纳它们的最短容器长度。
分析:具体请看代码。
1、max(len1,i+len2)中包含的两种情况。len1长度足够,另一种len1长度不够。
2、本来的情况是左右都轮回一遍,放在代码中相当于上下交换且每次只把上部分往右移。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char s1[120],s2[120];
int len1,len2,ans;
void cmp(char s1[],char s2[]){
len1=strlen(s1),len2=strlen(s2);
for(int i=0;i<len1;i++){
int flag=1;
for(int j=0;j<len2&&i+j<len1;j++){
if(s1[i+j]+s2[j]>='2'+'2'){flag=0;break; }
}
if(flag) ans=min(ans,max(len1,i+len2));
}
}
int main(){
while(~scanf("%s%s",s1,s2)){
ans=strlen(s1)+strlen(s2);
cmp(s1,s2);
cmp(s2,s1);
printf("%d\n",ans);
}
return 0;
}