zzuli2159 布线 贪心

来源:互联网 发布:苹果平板淘宝开店在哪 编辑:程序博客网 时间:2024/06/05 04:29

2159: 布线

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 201  Solved: 31

SubmitStatusWeb Board

Description

DML准备新建一个网吧,但是之前要进行网络搭建。DML的网吧里面有 N 台电脑和 M 个分线器,但是整个网吧只有一个网线出口。分线器的作用是将一根网线转换成多根网线。DML也知道每个分线器输出的最大网线根数S,那么至少需要使用多少个分线器才能使得每台电脑都连上网络?

Input

本题为多实例测试
第一行输入 n,m(0 <= n,m <= 100)
第二行输入 每个分线器输出的最大网线根数S(0≤S≤100)。

Output

输出最少需要的分线器数量。若不能使得所有服务器都有网线可用,输出“Impossible”(不带引号)。

Sample Input

10 4
2 7 2 3

Sample Output

3

HINT

不一定要将分线器输出的每根线都用上


题解:

第一眼的感觉就是贪心,把分线器网线根数从大到小排序,n依次减去,如果n>0,说明服务器接不完,就需要留一个口接下一个分线器,即n++

其次要注意的是n==0和n==1时,输出0,因为网吧自带一个接口


#include<iostream>#include<algorithm>using namespace std;int a[105];int main(){int aim,n;while(cin>>aim>>n){for(int i=0;i<n;i++){cin>>a[i];}if(aim==0||aim==1){cout<<0<<endl;continue;}sort(a,a+n,greater<int>());int cnt=0;for(int i=0;i<n;i++){aim-=a[i];cnt++;if(aim<=0){break;}else{aim++;//cout<<aim<<endl;}}if(aim>0)cout<<"Impossible"<<endl;else cout<<cnt<<endl;}return 0;}


原创粉丝点击