贪心——Shopping
题目描述
你要买n件物品,其中有一些是凳子。
商场正在举行促销活动,如果购物车中有至少一个凳子,那么你可以半价购买这个购物车中最贵的一个物品。
你有m辆购物车,请最小化你的花费。
输入描述:
第一行一个整数t表示数据组数 (1 ≤ t ≤ 100)。
每组数据第一行两个整数n,m (1 ≤ n,m ≤ 1000),接下来n行每行两个整数ai,bi,分别表示第i件物品的价格以及它是否是凳子 (1 ≤ ai ≤ 1e5, 0 ≤ bi ≤ 1)。
输出描述:
每组数据输出一行一个实数表示最小花费,保留一位小数。
示例
输入
2
5 1
1 0
2 1
3 1
4 0
5 0
5 10
1 0
2 1
3 1
4 0
5 0
输出
12.5
10.5
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int t,n,m,b,k;
double sum,a[10001];
cin>>t;
while(t--){
cin>>n>>m;
k=0;
sum=0;
memset(a,0,sizeof(a));
for(int i=0;i<n;i++){
cin>>a[i]>>b;
if(b==1){
k++;
}
}
k=min(k,m);
sort(a,a+n);
for(int i=0;i<n;i++){
if(i>=n-k){
sum+=a[i]/2;
}
else{
sum+=a[i];
}
}
printf("%.1lf\n",sum);
}
return 0;
}