码迷,mamicode.com
首页 > 其他好文 > 详细

UVa-1588 Kickdown(换低档装置)

时间:2018-02-01 23:08:07      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:blog   ios   src   技术   pre   clu   open   div   using   

给出两个长度分别为n1,n2(n1,n2≤100)且每列高度只为1或2的长条(每个长条的一边是齐平的)。需要将它们放入一个高度为3的容器,问能够容纳它们的最短容器长度。

原题及输出格式见https://vjudge.net/problem/UVA-1588

思路:将较长的一根固定,用短长条去遍历即可。本题的关键在于两点

1.将完全内部嵌合以及部分嵌合的情况分类讨论。

2.不仅有右方部分嵌合,别忘了短条在左方部分嵌合的情况。(这个左方是相对的,看你怎么想了)

以下是我的C++代码:

技术分享图片
 1 #include <iostream>
 2 #include <string>
 3 #include <algorithm>
 4 using namespace std;
 5 string A, a;
 6 int main()
 7 {
 8     while (cin >> A >> a)
 9     {
10         int rec = 0, MIN = 200; //最终答案不会超过200
11         if (a.size() > A.size())swap(A, a);
12         auto j = A.size(), k = a.size();
13         string A = string(a.size(), 0) + ::A + string(a.size(), 0);//作用域运算符取得外部变量,之后便隐藏掉外部A
14         auto J = A.size();
15         for (decltype(a.size())i = 0; i < J - k; ++i)
16         {
17             decltype(a.size())m = 0, n = i;
18             for (; m < k; ++m, ++n)
19             {
20                 if (A[n] - 0 + a[m] - 0 <= 3)continue;
21                 else break;
22             }
23             if (m == k)
24             {
25                 if (i < k) { if (k - i + j < MIN)MIN = k - i + j; }   //左嵌合
26                 else if (i > j) { if (i < MIN)MIN = i; } //右嵌合
27                 else { if (j < MIN)MIN = j; }
28             }
29         }
30         cout << MIN << endl;
31     }
32     return 0;
33 }
View Code

UVa-1588 Kickdown(换低档装置)

标签:blog   ios   src   技术   pre   clu   open   div   using   

原文地址:https://www.cnblogs.com/starpast/p/8401387.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!