**
航电oj:Stamps
**
#题目描述
#给你 需求量 各个盆友有的量 问要想多少个盆友借票 (尽量少的)
#不要忘了要按规定样式输出 盆友的票数可以 排序 或者 哈希
#知识点
哈希 排序
#代码
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int t;
int n;
int num;
int stamperson[10005];
int main()
{
scanf("%d",&t);
int p =1;
while(t--)
{
memset(stamperson,0,sizeof(stamperson));
int temp;
int sum = 0;
scanf("%d%d",&num,&n);//需求量 盆友数
for(int i=1;i<=n;i++)
{
scanf("%d",&temp);
stamperson[temp]++;
sum += temp;
}
//printf("--------%d----%d\n",sum,num);
if(sum < num)
{
printf("Scenario #%d:\n",p);
printf("impossible\n\n");
p++;
continue;
}
if(sum == num)
{
printf("Scenario #%d:\n",p);
printf("%d\n\n",n);
p++;
continue;
}
///
int getstamp = 0;
int friendnum = 0;
for(int i = 10000;i>=1;)
{
if(stamperson[i] == 0)
{
i -- ;
continue;
}
stamperson[i] -- ;//盆友借出了 相关的数据要跟新
friendnum ++;
getstamp += i;
if(getstamp >= num)
{
printf("Scenario #%d:\n",p);
printf("%d\n\n",friendnum);
p++;
break;
}
}
}
return 0;
}
#总结
多练没错 不多比比