

题目大意:一共有n个解题时间,求出在300分钟内最多能解出多少题目,并取出罚时为多少,本题注意罚时不等于用时,罚时等于这道题从开始比赛到解出题目的时长为这道题目的罚时,所以罚时一定大于等于用时
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
int main()
{
int t, n;
int a[22];
cin >> t;
while (t--)
{
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
sort(a, a + n);
//进行排序,先做用时少的题目解出题目才能最多,
//所以这道题目也是使用贪心的思想
int sum = 0,cnt = 0, sum1 = 0;
//sum1为用时,sum为罚时,cnt为解出的题目数
for (int i = 0; i < n; i++)
{
int x = sum1 + a[i];//一定要注意在求罚时的时候要累加的是什么
sum1 += a[i];
if (sum1 > 300)
//如果用时超过300分钟
{
break;
}
sum += x;
cnt++;
}
cout << cnt << ' ' << sum << endl;
}
}
3209

被折叠的 条评论
为什么被折叠?



