22 条题解

  • 48
    @ 2023-4-5 14:06:35

    嘀嘀嘀~~~本次题解已送达!

    #include <bits/stdc++.h>
    using namespace std;
    int n, s[11], b[11], ans = 2000000000;//ans刚开始设置大一点
    int main()
    {
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> s[i] >> b[i];//输入酸度、甜度
        //循环枚举1~2的n次方-1
        for (int i = 1; i < (1 << n); i++)
        {
            int sum1 = 1, sum2 = 0;//总酸度、总甜度每次枚举前先初始化为0
            //检测i的每个二进制是不是1
            for (int j = 0; j < n; j++)
            {
                if (i & (1 << j))//如果第j位是1
                {
                    sum1 *= s[j + 1];
                    sum2 += b[j + 1];
                }
            }
            ans = min(ans, abs(sum1 - sum2));//更新最小值
        }
        cout << ans;
        return 0;
    }
    

    欢迎下次采购!

    • @ 2023-8-1 21:03:49

      棒,下次加油

    • @ 2023-9-17 15:30:48

      请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。

  • 14
    @ 2023-8-8 19:31:42

    本题利用这节课的内容,用到&与<<

    #include <bits/stdc++.h>
    using namespace std;
    int n,a[100],b[100],s=1000000;
    int main()
    {
        cin>>n;
        for (int i=1;i<=n;i++)
            cin>>a[i]>>b[i];
        for (int i=1;i<(1<<n);i++)
        {
            int sum1=1,sum2=0;//酸度是乘法,开始为1;甜度是加法,开始为0;
            for (int j=0;j<n;j++)
            {
                if (i & (1<<j))
                {
                    sum1*=a[j+1];//计算总酸度
                    sum2+=b[j+1];//计算总甜度
                }
            }
            s=min(s,abs(sum1-sum2));//计算最小值
        }
        cout<<s;
        return 0;
    }
    
    • 7
      @ 2023-8-9 16:16:40
      #include <bits/stdc++.h>
      using namespace std;
      int n,sum1 = 1,sum2,a[15],b[15],ans = 1000000000;//定义(全局)变量
      int main()
      {
            cin >> n;
            for (int i = 0;i < n;i++)
            {
                  cin >> a[i] >> b[i];
            }
            for (int i = 1;i < (1 << n);i++)
            {
                  sum1 = 1;
                  sum2 = 0;//初始化
                  for (int j = 0;j < n;j++)
                  {
                        if (i & (1 << j))
                        {
                              sum1 *= a[j];//酸就乘
                              sum2 += b[j];//甜就加
                        }
                  }
                  if (abs(sum1 - sum2) < ans)//绝对值比较
                  {
                        ans = abs(sum1 - sum2);//更新答案
                  }
            }
            cout << ans;//输出答案
            return 0;
      }
      

      已AC,请放心使用 本日第1篇题解

      • @ 2024-6-9 11:38:16

        请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。

    • 6
      @ 2023-11-5 20:18:11

      AC代码

      #include <bits/stdc++.h>
      using namespace std;
      int main()
      {
          long long n,a[11],b[11],minn;
          cin>>n;
          for(long long i=0;i<n;i++)
              cin>>a[i]>>b[i];
          for(long long i=1;i<(1<<n);i++){
              long long x,y;
              x=1,y=0;
              for(long long j=0;j<n;j++){
                  if(i&(1<<j)){
                      x*=a[j];
                      y+=b[j];
                  }
              }
              minn=min(minn,abs(x-y));
          }
          cout<<minn;
          return 0;
      }
      
      • 5
        @ 2024-1-6 17:29:58
        #include <bits/stdc++.h>
        using namespace std;
        int n, s[11], b[11], ans = 2000000000;
        int main()
        {
            cin >> n;
            for (int i = 1; i <= n; i++)
                cin >> s[i] >> b[i];
            for (int i = 1; i < (1 << n); i++)
            {
                int sum1 = 1, sum2 = 0;
                for (int j = 0; j < n; j++)
                {
                    if (i & (1 << j))
                    {
                        sum1 *= s[j + 1];
                        sum2 += b[j + 1];
                    }
                }
                ans = min(ans, abs(sum1 - sum2));
            }
            cout << ans;
            return 0;
        }
        
        • 5
          @ 2023-10-12 19:49:54
          
          
          #include <bits/stdc++.h>
          using namespace std;
          int n, s[11], b[11], ans = 2000000000;//ans刚开始设置大一点
          int main()
          {
          cin >> n;
          for (int i = 1; i <= n; i++)
          cin >> s[i] >> b[i];//输入酸度、甜度
          //循环枚举1~2的n次方-1
          for (int i = 1; i < (1 << n); i++)
          {
          int sum1 = 1, sum2 = 0;//总酸度、总甜度每次枚举前先初始化为0
          //检测i的每个二进制是不是1
          for (int j = 0; j < n; j++)
          {
          if (i & (1 << j))//如果第j位是1
          {
          sum1 *= s[j + 1];
          sum2 += b[j + 1];
          }
          }
          ans = min(ans, abs(sum1 - sum2));//更新最小值
          }
          cout << ans;
          return 0;
          
          
          
          
          • 5
            @ 2023-2-28 14:30:31

            由于n不超过10,可以考虑O(2^n)子集枚举。 对于每种情况,使用左移运算和按位与运算,求出总酸度sum1和总甜度sum2,用abs函数求出差的绝对值。 对所有情况取最小值即可。

            代码
            #include <iostream>
            using namespace std;
            int n, s[11], b[11], ans = 2000000000;
            int main()
            {
                cin >> n;
                for (int i = 1; i <= n; i++)
                    cin >> s[i] >> b[i];
                for (int i = 1; i < (1 << n); i++)
                {
                    int sum1 = 1, sum2 = 0;
                    for (int j = 0; j < n; j++)
                    {
                        if (i & (1 << j))
                        {
                            sum1 *= s[j + 1];
                            sum2 += b[j + 1];
                        }
                    }
                    ans = min(ans, abs(sum1 - sum2));
                }
                cout << ans;
                return 0;
            }
            


            • 4
              @ 2023-11-5 20:16:46

              伪代码如下

              #include <bits/stdc++.h>
              using namespace std;
              int main()
              {
                  定义n,a[11],b[11],minn;
                  输入n,a[i],b[i];
                  i遍历1至(1<<n)-1
                      定义x,y;
                      x=1,y=0;
                      j遍历0至n-1
                          如果i&(1<<j)!=0
                              x*=a[j];
                              y+=b[j];
                      minn=minn和x-y的绝对值的最小值;
                  输出minn;
                  return 0;
              }
              
              • 4
                @ 2023-10-12 19:52:07
                #include <bits/stdc++.h>
                using namespace std;
                int n, s[11], b[11], ans = 2000000000;//ans刚开始设置大一点
                int main()
                {
                    cin >> n;
                    for (int i = 1; i <= n; i++)
                        cin >> s[i] >> b[i];//输入酸度、甜度
                    //循环枚举1~2的n次方-1
                    for (int i = 1; i < (1 << n); i++)
                    {
                        int sum1 = 1, sum2 = 0;//总酸度、总甜度每次枚举前先初始化为0
                        //检测i的每个二进制是不是1
                        for (int j = 0; j < n; j++)
                        {
                            if (i & (1 << j))//如果第j位是1
                            {
                                sum1 *= s[j + 1];
                                sum2 += b[j + 1];
                            }
                        }
                        ans = min(ans, abs(sum1 - sum2));//更新最小值
                    }
                    cout << ans;
                    return 0;
                
                • 4
                  @ 2023-10-12 19:50:38
                  
                  

                  #include <bits/stdc++.h> using namespace std; int n, s[11], b[11], ans = 2000000000;//ans刚开始设置大一点 int main() { cin >> n; for (int i = 1; i <= n; i++) cin >> s[i] >> b[i];//输入酸度、甜度 //循环枚举1~2的n次方-1 for (int i = 1; i < (1 << n); i++) { int sum1 = 1, sum2 = 0;//总酸度、总甜度每次枚举前先初始化为0 //检测i的每个二进制是不是1 for (int j = 0; j < n; j++) { if (i & (1 << j))//如果第j位是1 { sum1 *= s[j + 1]; sum2 += b[j + 1]; } } ans = min(ans, abs(sum1 - sum2));//更新最小值 } cout << ans; return 0;

                  
                  
                  • 3
                    @ 2024-4-13 16:22:22
                    #include <bits/stdc++.h>
                    using namespace std;
                    int main()
                    {
                        long long n,a[11],b[11],minn;
                        cin>>n;
                        for(long long i=0;i<n;i++)
                            cin>>a[i]>>b[i];
                        for(long long i=1;i<(1<<n);i++){
                            long long x,y;
                            x=1,y=0;
                            for(long long j=0;j<n;j++){
                                if(i&(1<<j)){
                                    x*=a[j];
                                    y+=b[j];
                                }
                            }
                            minn=min(minn,abs(x-y));
                        }
                        cout<<minn;
                        return 0;
                    }
                    
                    ---
                    AC代码
                    
                    • 3
                      @ 2024-3-3 17:48:30
                      #include <bits/stdc++.h>
                      using namespace std;
                      int n,ans = 100000;
                      struct STU
                      {
                          int a,b;
                      }s[15];
                      int main()
                      {
                          cin >> n;
                          for(int i = 0; i < n; i++)
                          {
                              cin >> s[i].a >> s[i].b;
                          }
                          for(int i = 1; i < (1 << n); i++)
                          {
                              int sum1 = 1,sum2 = 0;
                              for(int j = 0; j < n; j++)
                              {
                                  if(i & (1 << j))
                                  {
                                      sum1 *= s[j].a;
                                      sum2 += s[j].b;
                                  }
                              }
                              ans = min(ans,abs(sum1 - sum2));
                          }
                          cout << ans;
                          return 0;
                      }
                      
                      • 2
                        @ 2023-10-29 19:49:34

                        这就是普普通通的搜索

                        struct s{ int x,y; }op[11]; 结构体定义

                        void dfs(int x,int y,int t){ if(!(x1 && y0))minx=min(abs(x-y),minx); for(int i=t+1; i<=n; ++i)dfs(x*op[i].x,y+op[i].y,i); }

                        搜索过程

                        dfs(1,0,0); cout << minx; 剩下主要的

                        • 0
                          @ 2024-6-9 11:40:47
                          #include <bits/stdc++.h>//**9739064**
                          using namespace std;
                          int n,sum1 = 1,sum2,a[15],b[15],ans = 1000000000;//定义(全局)变量
                          int main()
                          {
                                cin >> n;
                                for (int i = 0;i < n;i++)
                                {
                                      cin >> a[i] >> b[i];
                                }
                                for (int i = 1;i < (1 << n);i++)
                                {
                                      sum1 = 1;
                                      sum2 = 0;
                                      for (int j = 0;j < n;j++)
                                      {
                                            if (i & (1 << j))
                                            {
                                                  sum1 *= a[j];
                                                  sum2 += b[j];
                                            }
                                      }
                                      if (abs(sum1 - sum2) < ans)
                                      {
                                            ans = abs(sum1 - sum2);
                                      }
                                }
                                cout << ans;
                                return 0;
                          }
                          
                          • 0
                            @ 2024-3-31 13:20:23

                            上AC代码

                            #include <bits/stdc++.h>
                            using namespace std;
                            int n, s[11], b[11], ans = 2000000000;
                            int main()
                            {
                                cin >> n;
                                for (int i = 1; i <= n; i++)
                                    cin >> s[i] >> b[i];//输入酸度和甜度
                                //枚举1~2的n次方-1
                                for (int i = 1; i < (1 << n); i++)
                                {
                                    int sum1 = 1, sum2 = 0;//酸度是乘的,初始化为1;甜度是加的,初始化为0
                                    //定义并初始化总酸度和总甜度
                                    for (int j = 0; j < n; j++)//检查i的每个二进制是不是1
                                    {
                                        if (i & (1 << j))//如果第j位是1
                                        {
                                            sum1 *= s[j + 1];//酸的乘
                                            sum2 += b[j + 1];//甜的加
                                        }
                                    }
                                    ans = min(ans, abs(sum1 - sum2));//更新最小值
                                }
                                cout << ans;
                                return 0;
                            }
                            
                            • -3
                              @ 2024-3-23 22:20:33

                              en...

                              • -17
                                @ 2023-4-2 13:54:24

                                头文件可以改成

                                #include <bits/stdc++.h>
                                
                              • -20
                                @ 2023-3-31 19:53:23

                                提示一下哈 问题出在代码中 头文件注意一下哦

                              • -22
                                @ 2023-6-10 13:03:08

                                #include <bits/stdc++.h> using namespace std; int n, s[11], b[11], ans = 2000000000; int main() { cin >> n; for (int i = 1; i <= n; i++) cin >> s[i] >> b[i]; for (int i = 1; i < (1 << n); i++) { int sum1 = 1, sum2 = 0; for (int j = 0; j < n; j++) { if (i & (1 << j)) { sum1 *= s[j + 1]; sum2 += b[j + 1]; } } ans = min(ans, abs(sum1 - sum2)); } cout << ans; return 0; }

                                • -22
                                  @ 2023-4-2 13:29:04

                                  #include <iostream> #include <stdlib.h> using namespace std; int n, s[11], b[11], ans = 2000000000; int main() { cin >> n; for (int i = 1; i <= n; i++) cin >> s[i] >> b[i]; for (int i = 1; i < (1 << n); i++) { int sum1 = 1, sum2 = 0; for (int j = 0; j < n; j++) { if (i & (1 << j)) { sum1 *= s[j + 1]; sum2 += b[j + 1]; } } ans = min(ans, abs(sum1 - sum2)); } cout << ans; return 0; }

                                信息

                                ID
                                51
                                时间
                                1000ms
                                内存
                                256MiB
                                难度
                                5
                                标签
                                递交数
                                3273
                                已通过
                                1243
                                上传者