repair

来源:互联网 发布:机房环境监控系统源码 编辑:程序博客网 时间:2024/05/22 09:02

实验任务

Fresh 住在一个美丽的小村庄。那里空气清新风景优美。唯一的不足就是台风多发。一天,台风来了,fresh 住的房子遭到毁坏,有个 1*L 的洞。然后 fresh 请 vegetable 来修理房子。已知 vegetable 带来 n 块 1*li 的木板和一把锯子。请问 vegetable 如何修理才能使所需的木板数目最少。

数据输入

第一行输入两个整数 L(0< L< 100000000)和 n(0<=n<=100000)
第二行有 n 个整数,表示每块木板的长度。

数据输出

输出最少需要的木板数.如果不能修好输出 impossible。

输入示例

5 3
1 3 2

输出示例

2

解题思路

贪心,每次都用剩下的木板中最长的即可。( 据说用sort会超时,那就用优先队列好了。。(:з」∠)

参考代码

#include <iostream>    #include <cstdio>  #include <queue>    using namespace std;    int main()    {        int l,n,i;        while (~scanf("%d %d",&l,&n)){           priority_queue<int> pq;          int ans = 0,mb;            for (i = 0;i < n;i++){              scanf("%d",&mb);              pq.push(mb);          }          for (i = 0;i < n;i++){              ans++;              if ((l -= pq.top()) <= 0)    break;              pq.pop();          }            l>0?printf("impossible\n"):printf("%d\n",ans);        }        return 0;    } 
0 0