Solution
根据题意已知有2种合成方法,假设A方法合成a件,B方法合成b件成品。
那么可以得到对应式子
约束条件为:a>=0;b>=0;2a+4a<=x;3a+b<=y **(注意a,b才是未知数x,y是已知的,并且 )**
求解: z = a + b的最大截距
如果思路清晰就是一道高中的线性规划知识,不过因为斜率原因需要分几种情况取对应点而已。
这里借用一下这位大佬的图本菜鸡画图不行
(1)
![图片说明](https://uploadfiles.nowcoder.com/images/20200428/919749006_1588087944862_B1AC829F6822509CA8EAE30C7AD4E2DD "图片标题")
(2)
![图片说明](https://uploadfiles.nowcoder.com/images/20200428/919749006_1588087959967_82BCB231E712F7DE8628039DCDC0F326 "图片标题")
(3)
![图片说明](https://uploadfiles.nowcoder.com/images/20200428/919749006_1588087972191_F810BC316F161D6D491A7F92DE5F63BC "图片标题")
取到对应截距最大点带入即可
#include &lt;bits/stdc++.h&gt; using namespace std; typedef long long ll; int main() { int T; scanf(&quot;%d&quot;, &amp;T); while (T--) { ll x, y; scanf(&quot;%lld %lld&quot;, &amp;x, &amp;y); ll temp1 = y, temp2 = y / 3, temp3 = x / 4, temp4 = x / 2; if (temp3 &gt;= temp1) printf(&quot;%lld\n&quot;, temp1); else if (temp4 &gt;= temp2) { double x1 = (4 * y - x) / 10.0; ll a = ceil(x1), b = floor(x1); //ceil向上取整,floor向下取整 ll ans = max(a + (y - a * 3), (b + (x - 2 * b) / 4)); printf(&quot;%lld\n&quot;, ans); } else printf(&quot;%lld\n&quot;, temp4); } return 0; }