2 条题解

  • 0
    @ 2024-11-12 10:19:07

    方案2-100分:

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    #define N 20
    using namespace std;
    int n;
    int a[N];
    int cnt=99999;
    long long vis[N];
    long long gcd(long long a,long long b)
    {
        if(b==0)
            return a;
        return
            gcd(b,a%b);
    }
    void dfs(int k,int step)
    {
        if(step==n+1)
        {
            if(k<cnt)
                cnt=k;
            return;
        }
        for(int i=1;i<=k;i++)
            if(gcd(vis[i],a[step])==1)
            {
                vis[i]*=a[step];
                dfs(k,step+1);
                vis[i]/=a[step];
            }
        vis[k+1]*=a[step];
        dfs(k+1,step+1);
        vis[k+1]/=a[step];
    }
    int main()
    {
        int temp;
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
            vis[i]=1;
        }
        sort(a+1,a+1+n);
        dfs(1,1);
        cout<<cnt<<endl;
        return 0;
    }
    
    
    • 0
      @ 2024-11-12 10:18:43

      方案一90分:

      #include <bits/stdc++.h>
      #define N 20
      using namespace std;
      int n;
      int a[N];
      int cnt = 99999;
      long long vis[N];
      long long gcd(long long a, long long b) {
          if (b == 0) return a;
          return gcd(b, a % b);
      }
      void dfs(int k, int step) {
          if (step == n + 1) {
              if (k < cnt) cnt = k;
              return;
          }
          for (int i = 1; i <= k; i++)
              if (gcd(vis[i], a[step]) == 1) {
                  vis[i] *= a[step];
                  dfs(k, step + 1);
                  vis[i] /= a[step];
              }
          vis[k + 1] *= a[step];
          dfs(k + 1, step + 1);
          vis[k + 1] /= a[step];
      }
      int main() {
          cin >> n;
          for (int i = 1; i <= n; i++) {
              cin >> a[i];
              vis[i] = 1;
          }
          sort(a + 1, a + 1 + n);
          dfs(1, 1);
          cout << cnt << endl;
          return 0;
      }
      
      
      • 1

      信息

      ID
      701
      时间
      1000ms
      内存
      256MiB
      难度
      10
      标签
      递交数
      3
      已通过
      1
      上传者