zoukankan      html  css  js  c++  java
  • comet_c1026

    这道题目要求给定一组数据,选出最多个数使数字两两互质,数据的个数小于14个。

    对于这么小的范围,暴力解肯定能过。

    用0.1表示是否选该数。

    则一共有2^n次选法,遍历即可。

    以下为代码

    #include<iostream>
    #include<queue>
    #include<string>
    #include<cstring>
    #include<map>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    long long gcd(long long a,long long b){
        return b==0?a:gcd(b,a%b);
    }
    int a[15];
    int b[15];
    bool sop(int k){
        for(int i=0;i<k-1;i++)
            for(int j=i+1;j<k;j++)
            if(gcd(b[i],b[j])!=1)
                return false;
        return true;
    }
    
    int main(){
        int t;
        cin>>t;
        while(t--){
            int n;
            cin>>n;
            for(int i=0;i<n;i++)
                cin>>a[i];
            int k=pow(2,n)-1;
            int maxn=0;
            for(int i=0;i<=k;i++){
                int z=i;
                int num=0;
                int sum=0;
                while(z){
                    if(z&1)b[sum++]=a[num];
                    z>>=1;
                    num++;
                }
                if(sop(sum)){
                    if(sum>maxn)
                        maxn=sum;
                }
            }
            cout<<maxn<<endl;
        }
        return 0;
    }

    如此就好

  • 相关阅读:
    typescript 箭头表达式
    typescript 参数类型
    ts介绍
    pm2
    koa2安装
    linux 搭建ftp
    CENTOS6.5 安装 mysql5.6 以及搭建双主
    bzoj 3043 (差分序列运用)
    poj 3277 City Horizon
    NOI2015 程序自动分析
  • 原文地址:https://www.cnblogs.com/Ean1zhi/p/12184791.html
Copyright © 2011-2022 走看看