zoukankan      html  css  js  c++  java
  • 五一训练礼包 — B

    B

    Content

      · 题目回溯

      · 题目分析

      · 可行代码

      · 总结

    (一) 题目回溯

    DESCRIPTION

    INPUT 

     OUTPUT

     EXAMPLE

     NOTE

    (二) 题目分析

    目的:将a组中a[0]个 0 与a[1]个 1 与a[2]个 2 和 b组中b[0]个 0 与b[1]个 1 与b[2]个 2通过关系式Ci各项组合的结果相加得到一个总和

    令最终总和为sum

    Ci的特征:每一项组合的结果只有三种,分别为2,0,-2,所以只需要保证2最多、-2最少即可,即(2,1)多、(1,2)少

    解题思路:

      1. 将所有(2,1)组合拿出,并且将使用过的a[2]与b[1]减去 .

      2. 尽可能减少a[1]、b[2],所以用b[0]b[2]减去a[1]、用a[0]a[2]减去b[2] .

      3. 由于除a[1]和b[2]外每一个数都已经被使用,又因为两组数字的数量相等,所以最终a[1]和b[2]一定相等 .

      4. 将 1 中的正数减去 3 的负数,就是最终的结果sum

    (三) 可行代码

     1 #include <iostream>
     2 #include <math.h>
     3 using namespace std;
     4 void input(int *arr)
     5 {
     6     for (int i = 0; i < 3; i++)
     7         cin >> arr[i];
     8     return;
     9 }
    10 int main()
    11 {
    12     int T;
    13     cin >> T;
    14     while (T--)
    15     {
    16         int a[3], b[3];
    17         input(a), input(b);
    18         int sum = 0;
    19         a[2] >= b[1] ? (sum = 2 * b[1], a[2] -= b[1], b[1] = 0) : (sum = 2 * a[2], b[1] -= a[2], a[2] = 0); // 对应步骤 1
    20         (a[1] -= b[0] + b[1]) > 0 ? ((b[2] -= a[0] + a[2]) > 0 ? sum -= 2 * b[2] : 0) : 0;                  // 对应步骤 3
    21         cout << sum << endl;
    22     }
    23     return 0;
    24 }

    (四) 总结

    对于这类求最大值的题目应该先考虑,找出最大值,然后找影响最大值的因素,具体体现为通过各种限制条件使负数尽可能的少。

  • 相关阅读:
    ORA-12543: TNS:destination host unreachable
    Visual Studio 2008 连接云端 visualstudio.com
    将博客搬至CSDN
    Shiro 系列笔记(一)
    Centos 6.7 安装jdk
    Centos service启动失败原因--权限问题
    form表单提交的ajax形式
    slf4j与mybatis结合显示sql
    Docker 部署 redis教程,附带部分小建议,防止踩坑
    Android中的EditText默认时不弹出软键盘的方法
  • 原文地址:https://www.cnblogs.com/kirk-notes/p/14725564.html
Copyright © 2011-2022 走看看