贪心的水题。直接排序从大到小,然后相加看是否能够与给定的长度相等,如果加完了的话还不等就输出impossible
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int cmp(const void *a, const void *b)
{
return *((int *)b) - *((int *)a);
}
int main()
{
int l,n,i;
int sum,len;
int a[605];
while(~scanf("%d%d",&l,&n))
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
qsort(a, n, sizeof(a[0]), cmp);
sum=len=0;
for(i=0;i<n;i++)
{
if(len<l)
{
len+=a[i];
sum++;
}
else
break;
}
if(len<l)
printf("impossible\n");
else
printf("%d\n",sum);
}
return 0;
}