欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Codeforces Round #661 C. Boats Competition(思维+暴力枚举)

程序员文章站 2022-06-09 17:41:39
...

题目地址: 传送门
题目贴上:
Codeforces Round #661 C. Boats Competition(思维+暴力枚举)
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)的方法呢?
待定!!

相关标签: 思维 CFS c++