Codeforces Round #661 C. Boats Competition(思维+暴力枚举)
程序员文章站
2022-06-09 17:41:39
...
题目地址: 传送门
题目贴上:
1.题意:有n个人,每个人都有自己的重量w,现在n个人中只能每两个人组成一队,且每个人只能在一支队伍中,现在让你组建一支参赛队伍,要求如下:每个队伍的质量都是相等的,现问这n个人怎么组队可以使参赛队伍数量最大?
2.思路:我们发现数据最大的w也才50,两个最大的w总和也才100,队伍最大也才100,明显可以暴力枚举解决
#include<bits/stdc++.h>
#define f(a,b,c) for(a=b;a<=c;++a)
using namespace std;
const int INF = 0x7fffffff;
typedef long long int ll;
int a[55],vis[55];
int main(void)
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
int sum = 0,cnt = 0;
for(int i=1;i<=n;++i)
cin>>a[i];
for(int k=2;k<=100;++k)
{
memset(vis,0,sizeof vis);
sum = 0;
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
if(i!=j &&!vis[i] && !vis[j] && a[i]+a[j]==k)
{
++sum;
vis[i]=1;
vis[j]=1;
}
}
}
cnt = max(cnt,sum);
}
cout<<cnt<<endl;
}
}
结果是AC了,但是这种方法也就只能解决n,w比较小的问题,那有没有O(n^2)的方法呢?
待定!!