• 方程的解——枚举&&水题


    题目

    链接

    给出方程组:$$displaystyle left{egin{aligned}11x + 13y + 17z = 2471 \13x + 17y + 11z = 2739end{aligned} ight.$$已知 $x$,$y$,$z$ 均为正整数,请你计算$x$,$y$,$z$相加之和的最小值

    解决方法

     由空间几何知,方程组确定的是一条直线,加上正整数约束就是一条线段,求线段上的点$x+y+z$的最小值。

    确定其中一个可求出另外两个,枚举其中范围较小的,$1 leq z leq 2471 / 17=145 $。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 //11x+13y=2471-17z=m
     5 //13x+17y=2739-11z=n
     6 bool get_xy(int z, int& x, int& y)
     7 {
     8     int m = 2471 - 17 * z;
     9     int n = 2739 - 11 * z;
    10     int tmp1 = 11 * n - 13 * m;
    11     int tmp2 = n - m;
    12     if(tmp1 % 18)  return false;
    13     if(tmp2 % 2)  return false;
    14     y = tmp1 / 18;
    15     x = tmp2 / 2 - 2 * y;
    16     if(x < 1 || y < 1)  return false;
    17     return true;
    18 }
    19 
    20 int main()
    21 {
    22     int maxx = 2471;
    23     int x, y;
    24     for(int z = 1;z < 150;z++)
    25     {
    26         if(get_xy(z, x, y))
    27         {
    28             //printf("%d  %d  %d %d
    ", x, y, z, x+y+z);
    29             if((x + y + z) < maxx)
    30             {
    31                 maxx = x + y + z;
    32             }
    33         }
    34     }
    35     printf("%d
    ", maxx);
    36 
    37     return 0;
    38 }
  • 相关阅读:
    线程安全的单例模式
    rsync 不真正同步,只显示更新的内容
    Python_元组、字典内建方法详解
    Python_元组、字典内建方法详解
    数组求差集
    svn数据库自动发布程序
    perl 比较目录
    被驱动表 拼接列无法走索引
    FILTER NESTLOOP 中驱动表问题
    Linux_SystemLogManager
  • 原文地址:https://www.cnblogs.com/lfri/p/11135509.html
Copyright © 2020-2023  润新知