Team Match(纯暴力解决)

【Problem Description】

The programming competition not only depends on the programmers, but also directed by the coaches. Mr Z is a coach who direct n players to take part in the Guangxi Province Collegiate Programming Contest. We assume that a team is consisted of 3 players whose ability is x, y, z respectively and x >= y >= z. Then the team’s total ability is 3 * x + 2 * y + 1 * z; And for a team, if its ability is not lower than the gold medal level m, the team will certainly win the gold medal. Mr Z would like to match teams to gain as many gold medals as possible, could you tell him how many gold medals it is?

【Input】

The first line is an integer T which indicates the case number.

And as for each case, there will be 2 lines.

In the first line, there are 2 integers n m, which indicate the number of players, the gold medal level respectively. Please remember n is always the multiple of 3.

In the second line, there are n integers which represents everyone’s ability.

It is guaranteed that——

T is about 100.

for 100% cases, 1 <= n <= 15, 1 <= m <= 30, 1 <= a[i] <= 20.

【Output】

As for each case, you need to output a single line.

There should be an integer in the line which means the gold medal teams Mr Z could match.

【Sample Input】

2

6 18

3 3 3 4 2 2

6 7

1 1 1 1 1 1

【Sample Output】

2
0

#include <iostream>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;

int main(){
	int t;	//案例号
	cin>>t;
	while(t--){
		int n,m;	//选手人数,金牌级别	(n总是3的倍数) 
		int a[20];
		cin>>n>>m;
		for(int i=1; i<=n; i++)	cin>>a[i];	//每个人的能力
		int sum=0;
		sort(a+1,a+n+1);
		
	start:	for(int i=1; i<=n; i++){
			
			if( a[i]==0 )	continue;
			//cout<<a[i]<<"**";
			for(int j=i+1; j<=n; j++){
				if( a[j]==0 )	continue;
				for(int k=j+1; k<=n; k++){
					if( a[k]==0 )	continue;
					if( a[i] + 2 * a[j] + 3 * a[k] >= m ){
						sum++;
						a[i]=0;
						a[j]=0;
						a[k]=0;	//标记的作
						goto start;
						/*这里真的不得不说一下,最开始的时候忽略了continue会直接下一个,而不是再次开始一个新的,这个忽略了真的折磨的我,,,一言难尽*/
					}
				}
			}
		}
		cout<<sum<<endl;
		
	}
	return 0;
}

其实这个的话我的思路最开始是想着一个最小搭一个最大的,然后发现好像不行,所以还是从小到达开始寻找吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值