我要AK

Problem Description

bLue 是一个奇怪的人,具体来说,就是在比赛里不按套路做题。他只会按题目顺序从前向后做题,在解出正在做的题之前不会换题。而且,如果某个题他选择跳过,那么直到比赛结束他也不会再看这道题。

最近,他参加了一场时长 2 小时的比赛,共有 5 题。比赛开始时,bLue 快速地把所有的题都读了一遍,并计算出了他解每一道题需要花费的时间,读题时间忽略不计(厉害了我的 bLue)。

渴望 AK 的 bLue 想知道他要如何安排自己的做题策略,才能使解题数最多。如果有多种方案的解题数相同,则 bLue 会选择总时间最少的方案。

 

注:总时间为解出每个题时的比赛时间的累加和,如:在 第 10 分钟解出第 1 题,第 30 分钟解出第 2 题,则总时间为 40 分钟。

Input

多组输入,首先输入一个 T (1 <= T <= 100),代表数据组数。

对于每组数据,输入一行,包含 5 个用空格隔开的整数,分别表示 bLue 解出第 1 道题 ~ 第 5 道题需要花费的时间 t (1 <= t <= 120),单位为分钟。

Output

对于每组数据,输出一行,包含 2 个整数,分别表示 bLue 的最大解题数和总时间(若最大解题数相同则取最少时间)。

Example Input
2
10 20 30 40 50
10 60 10 20 30
Example Output
4 200
4 140
Hint

对于第 1 组示例:bLue 可以选择做前 4 题,而第 5 题没有时间做。这样他的解题数最大,共 4 题,解题时间分别为:第 10 分钟、第 30 分钟、第 60 分钟、第 100 分钟。总时间为 10 + 30 + 60 + 100 = 200。

对于第 2 组示例:bLue 可以选择做第 1, 3, 4, 5 题,而跳过第 2 题。这样他的解题数最大,共 4 题,解题时间分别为:第 10 分钟、第 20 分钟、第 40 分钟、第 70 分钟。总时间为 10 + 20 + 40 + 70 = 140。

 

提示 1 (01:00):为什么不试一下暴力枚举所有可能的解题情况呢?

提示 2 (01:30):不如多套点 for 试一下?最多也就 2^5 嘛~

Author

「SDUT Round #1 - Hello 2017 跨年大作战」bLue

#include<stdio.h>
int main()
{
	int a,b,c,d,e,ji;
	int g[6],s,t,n;
	int sum;
	int max,min;
	scanf("%d",&t);
	while(t--)
	{
		max=0;
		min=666666;
		sum=0;
		for(int i=0;i<=4;i++)
			scanf("%d",&g[i]);
		for(a=0;a<=1;a++)
		{
			for(b=0;b<=1;b++)
			{
				for(c=0;c<=1;c++)
				{
					for(d=0;d<=1;d++)
					{
						for(e=0;e<=1;e++)
						{
							ji=a+b+c+d+e;
							s=sum=0;
							if(a) {
								s=s+g[0];
								sum+=s;
							}
							if(b) {
								s=s+g[1];
								sum+=s;
							}
							if(c) {
								s=s+g[2];
								sum+=s;
							}
							if(d) {
								s=s+g[3];
								sum+=s;
							}
							if(e) {
								s=s+g[4];
								sum+=s;
							}
							if(s>120) continue;
							else 
							{
								if(max<ji) {max=ji;min=sum;}
								else if(max==ji)
								{
									if(min>sum) min=sum;
								}
							}
						}
					}
				}
			}
		}
		printf("%d %d\n",max,min);
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值