暴力解决)"/>
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;
}
其实这个的话我的思路最开始是想着一个最小搭一个最大的,然后发现好像不行,所以还是从小到达开始寻找吧
更多推荐
Team Match(纯暴力解决)
发布评论