算法笔记-----贪心算法----加里比海盗船--最优装载问题

 1 //program 2-1
 2 #include <iostream>
 3 #include <algorithm>
 4 const int N=1000005;
 5 using namespace std;
 6 
 7 double w[N]; //古董的重量数组
 8 int main()
 9 {
10     double c;
11     int n;
12     cout<<"请输入载重量c及古董个数n:"<<endl;
13     cin>>c>>n;
14     cout<<"请输入每个古董的重量,用空格分开: "<<endl;
15     for(int i=0;i<n;i++)
16     {
17       cin>>w[i]; //输入每个物品重量
18     }
19     sort(w,w+n); //按古董重量升序排序
20     double tmp=0.0;
21     int ans=0; // tmp为已装载到船上的古董重量,ans为已装载的古董个数
22     for(int i=0;i<n;i++)
23 {
24       tmp+=w[i];
25      if(tmp<=c)
26      ans++;
27       else
28         break;
29 }
30     cout<<"能装入的古董最大数量为Ans=";
31     cout<<ans<<endl;
32     return 0;
33 }
34 
35 //可以输出古董编号
36 /**
37 struct antique{
38     int id; //古董的编号
39     double w; //古董的重量
40 }s[N];
41 bool cmp(antique a, antique b)//比较函数
42 {
43     return a.w < b.w; //指明按照古董重量升序排列
44 }
45 int main()
46 {
47     double c;
48     int n;
49     cout<<"请输入载重量c及古董个数n:"<<endl;
50     cin>>c>>n;
51     cout<<"请输入每个古董的重量,用空格分开: "<<endl;
52     for(int i=0;i<n;i++)
53     {
54       s[i].id=i+1;
55       cin>>s[i].w; //输入每个古董重量,用空格隔开
56     }
57     sort(s,s+n,cmp);
58     double tmp=0.0;
59     int ans =0;  //ans记录已经装载的古董个数,tmp代表装载到船上的古董的重量
60     for(int i=0;i<n;i++)
61     {
62      tmp += s[i].w;
63      if(tmp<=c)
64        ans ++;
65     else
66        break;
67      }
68     cout<<"能装入的古董最大数量为Ans = ";
69     cout<<ans<<endl;
70     cout<<"装入的古董编号为";
71     for(int i=0;i<ans;i++)
72     {
73       cout<<s[i].id<<" ";
74     }
75     return 0;
76 }
77 **/
原文地址:https://www.cnblogs.com/alimjan/p/8116335.html