1099. Packing Passengers

阅读: 评论:0

1099. Packing Passengers

1099. Packing Passengers

 1  /*
 2          题目大意是要求用两个飞机正好将所有的乘客全部载下,并且要求所要花费的费用最少
 3          根据第一个条件,这道题就转化成了求解不定方程的问题
 4          A机型的载客量*A机型的数量+B机型的载客量*B机型的数量=总乘客量-----(1)
 5          使用扩展欧几里得算法可以求出一组基本解x,y使得一下的算式成立
 6          A机型的载客量*X+B机型的载客量*Y=gcd(A机型的载客量,B机型的载客量)
 7          X*=(总乘客量/gcd)
 8          Y*=(总乘客量/gcd)
 9          就求出了一组满足(1)的一组解
10          不定方程(1)的其他解可以通过(2),(3)求出
11          X=X+B的载客量/gcd(A的载客量,B的载客量)*t-------------(2)
12          Y=Y-A的载客量/gcd(A的载客量,B的载客量)*t-------------(3)
13          因为题目还有条件二,也就是需要让使用的费用最小
14          为了满足这个条件,就需要尽可能多的选择那些性价比高的机型,就是使得(2)或者(3)尽可能接近0
15          因为X,Y不能为负所以需要对求解出来的t进行取整修改
16 
17  */
18  #include  <iostream>
19  #include  <math.h>
20  using  namespace std;
21  long  long exgcd( long  long a, long  long b, long  long &x, long  long &y)
22 {
23          if(b== 0)
24         {
25                 x= 1;
26                 y= 0;
27                  return a;
28         }
29          long  long r=exgcd(b,a%b,x,y);
30          long  long t=x;
31         x=y;
32         y=t-a/b*y;
33          return r;
34 }
35  int main()
36 {
37          long  long n,coa,cob,caa,cab;
38         cin>>n;
39          int t= 1;
40          while(n!= 0)
41         {
42                 cin>>coa>>caa>>cob>>cab;
43                  long  long x,y;
44                  long  long r=exgcd(caa,cab,x,y);
45                  if(n%r!= 0)
46                         cout<< "Data set "<<t<< ": cannot be flown"<<endl;
47                  else
48                 {
49                         x*=(n/r);
50                         y*=(n/r);
51                         
52                          int dela=ceil(( double)(-x)*r/cab); //如果b性价比高那么就将a机型飞机的数量减少,使得其尽可能的接近0
53                          int delb=floor(( double)(y)*r/caa); //如果a性价比高那么就将b机型飞机的数量减少,使得其尽可能的接近0
54 
55                          int  tem=coa*cab<=cob*caa?delb:dela; //选出性价比高的机型
56                         x+=cab/r*tem;
57                         y-=caa/r*tem;
58                         cout<< "Data set "<<t<< ": "<<x<< " aircraft A, "<<y<< " aircraft B"<<endl;      
59                 }
60                 cin>>n;
61                 t++;
62         }
63 }

转载于:.html

本文发布于:2024-01-29 04:42:10,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170647453312772.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:Packing   Passengers
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23