ACM_Ruin of Titanic(简单贪心)
Ruin of Titanic
Time Limit: 2000/1000ms (Java/Others)
Problem Description:
看完Titanic后,小G做了一个梦。梦见当泰坦尼克号撞到冰山时,自己也在大船上。情况十分危急,不过这个时候船才刚进水,距离船身完全沉没还有一定时间(假如救生的船足够的话可以顺利逃生)。 假设大船上共有n个人,每个人的重量为W1,W2,....,Wn;现在有若干小船,每一只船最大载重为100,且每一艘小船规定最多只能载2人。你能帮焦急的船长算出最少需要多少船只才能使n人顺利逃生吗?
Input:
输入包含多组测试数据。每一组测试第一行输入正整数n(<=10000)表示共n个人。下一行分别输入n个正整数(Wi<=100),表示n个人的体重。
Output:
对于每一组测试,输出至少需要的船只数量,占一行。
Sample Input:
3 40 65 55 2 80 59
Sample Output:
2 2
解题思路:简单贪心。先排序,然后从体重大的往体重小的贪心,如果最大和最小之和不大于100,则i++,m++;否则--j即可,水过!
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=10005; 4 int n,a[maxn],m; 5 int main(){ 6 while(cin>>n){ 7 for(int i=0;i<n;++i)cin>>a[i]; 8 sort(a,a+n);m=0; 9 for(int i=0,j=n-1;i<=j;--j){ 10 if(a[i]+a[j]<=100){m++;++i;} 11 else m++; 12 } 13 cout<<m<<endl; 14 } 15 return 0; 16 }