[Kick Start 2020] Round A 1.Allocation

[Kick Start 2020] Round A 1.Allocation

1. 题目

Problem
There are N houses for sale. The i-th house costs Ai dollars to buy. You have a budget of B dollars to spend.

What is the maximum number of houses you can buy?

Input
The first line of the input gives the number of test cases, T. T test cases follow. Each test case begins with a single line containing the two integers N and B. The second line contains N integers. The i-th integer is Ai, the cost of the i-th house.

Output
For each test case, output one line containing Case #x: y, where x is the test case number (starting from 1) and y is the maximum number of houses you can buy.

Limits
Time limit: 15 seconds per test set.
Memory limit: 1GB.
1 ≤ T ≤ 100.
1 ≤ B ≤ 105.
1 ≤ Ai ≤ 1000, for all i.

Test set 1
1 ≤ N ≤ 100.

Test set 2
1 ≤ N ≤ 105.

Sample

Input

Output

3
4 100
20 90 40 90
4 50
30 30 10 10
3 300
999 999 999

Case #1: 2
Case #2: 3
Case #3: 0

In Sample Case #1, you have a budget of 100 dollars. You can buy the 1st and 3rd houses for 20 + 40 = 60 dollars.
In Sample Case #2, you have a budget of 50 dollars. You can buy the 1st, 3rd and 4th houses for 30 + 10 + 10 = 50 dollars.
In Sample Case #3, you have a budget of 300 dollars. You cannot buy any houses (so the answer is 0).
Note: Unlike previous editions, in Kick Start 2020, all test sets are visible verdict test sets, meaning you receive instant feedback upon submission.

2. 思路

  • 下次感觉自己能做的更好系列,毕竟这个是一个月一次的比赛,坚持
  • 思路:贪心原则,买便宜的house就能买很多
  • 时间复杂度nlogn

3. 代码

#include<iostream>
#include<vector>
#include <algorithm>
using namespace std;

int main(){
   int testNum;
   cin >> testNum;
   for (int i = 0; i < testNum; i++) {
   		int houseNum;
   		int budget;
   		cin >> houseNum >> budget;
   		vector<int> prices;
   		for (int j = 0; j < houseNum; j++) {
   			int onePrice;
   			cin >> onePrice;
   			prices.push_back(onePrice);
   		}
   		sort(prices.begin(), prices.end());
   		int oneres = 0;
   		for (int j = 0; j < houseNum; j++) {
   			if (budget >= prices[j]) {
   				oneres++;
   				budget -= prices[j];
   			} else 
   				break;
   		}
   		cout << "Case #" << i+1 << ": " << oneres << endl;
   } 
   return 0;
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值