1、UVa 11100 - The Trip, 2007

  题意:给出若干大小不同的包裹,小的能够装在大的包裹里面。求最小的大包裹数,并且保证在所有的大包裹中,所含有的小包裹数目最小。

  思路:显然,相同大小的包只能放在不同的大包里,那么最小的大包数目就是相同大小的包的最大数目,记为k。之后,根据从小到大排序后,对于每个大包i可选取从i开始,间隔k个包的那些包裹作为该大包从里到外的各个包裹。

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 int dm[10005];
 5 int main()
 6 {
 7     int k = 1,n,i,t;
 8     while (cin >> n, n != 0)
 9     {
10         for (i = 0; i < n; i++) cin >> dm[i];
11         sort(dm, dm + n);
12         int maxt = 1;
13         for ( i = 1, t = 1; i < n; i++)
14         {
15             if (dm[i] == dm[i - 1]) t++;
16             else
17             {
18                 if (t > maxt) maxt = t;
19                 t = 1;
20             }
21         }
22         if (t > maxt) maxt = t;
23         if (k > 1) cout << endl;
24         cout << maxt << endl;
25         for (int i = 0; i < maxt; i++)
26         {
27             for (int j = i; j < n; j += maxt)
28             {
29                 if (j == i) cout << dm[j];
30                 else cout << ' ' << dm[j];
31             }
32             cout << endl;
33         }
34         k++;
35     }
36     return 0;
37 }
View Code

相关文章:

  • 2021-11-22
  • 2021-11-19
  • 2022-02-26
  • 2021-10-20
  • 2022-12-23
  • 2021-11-15
  • 2021-12-03
  • 2021-06-16
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案