首页 > 学院 > 开发设计 > 正文

算典03_习题_11_UVA-1588

2019-11-08 02:42:25
字体:
来源:转载
供稿:网友

Kickdown

题意

给出两个长度分别为n 1 ,n 2 (n 1 ,n 2 ≤100)且每列高度只为1或2的长条。需要将它们放入一个高度为3的容器(如图3-8所示),问能够容纳它们的最短容器长度。

题解

模拟 分别固定其中一个,一步一步移动另一个,并找出结果的最小值

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int maxn = 1e2 +5;#define met(a,b) memset(a, b, sizeof(a));char a[maxn], b[maxn];int solve(char a[], int len1, char b[], int len2){ int ans = 0, i, j, k; for(i = 0; i < len1; ++i) { for(j = 0, k = 0; i + j < len1 && k < len2; ++j,++k){ int t1 = a[i + j] - '0', t2 = b[k] - '0'; if(t1+t2 > 3){ break; } } if(i + j == len1 || k == len2) { ans = max(len1, i + len2); break;} } if(i == len1) ans = len1 + len2; return ans;}int main(){ #ifdef _LOCAL freopen("in.txt","r", stdin); #endif // _LOCAL while(scanf("%s%s", a, b) == 2) { int len1 = strlen(a), len2 = strlen(b); PRintf("%d/n", min(solve(a,len1,b,len2), solve(b,len2,a,len1))); } return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表