12 条题解

  • 38
    @ 2024-4-24 21:14:11

    一个赞拿走

    #include <iostream>
    #include <algorithm>
    using namespace std;
    int n,m,ans=10000;
    int a[15];
    int main()
    {
        cin >> n >> m;
        for (int i = 1; i <= n; i++)
        {
            cin>>a[i];//hetao1415825
        }
        sort(a + 1, a + n + 1);
        do
        {
            int num = 1, sum = 0;
            for (int i = 1; i <= n; i++)
            {
                if (sum + a[i] > m)
                {
                    sum = 0;
                    num++;
                }
                sum += a[i];
            }
            ans = min(ans, num);
        } while (next_permutation(a + 1, a + n + 1));
        cout << ans;
        return 0;
    }
    

    笑话时间到(5个); 1:老师:“你的题为《抢救亲人》的作文怎么连一个标点符号也没有?”

    学生:“那么急的事怎么能停顿呢?” 2:今天戴耳机听歌,发现左边没声音了,经过检查才发现是虚惊一场,原来是左耳聋了,我还以为耳机坏了,吓我一跳。

    3:朋友中午请我吃饭,买单的时候我看到他掏钱掏得很慢,就说“要不我来掏吧。”“那怎么好意思啊!”“没事。”于是我把手伸进了他的口袋。

    4:一天没戴眼镜逛街,看到一个既恶心又丑陋的人。想过去看看到底是谁,原来是一面镜子。

    5:老王掉进了水井里,在村民的热心帮助下,老王终于适应了水井里面的生活。

    笑话结束,点个赞吧,求求了; 下一个题还有三个,期待吧。。。。。。

  • 27
    @ 2023-2-27 17:10:51
    题目大意
            存在n个数,将这n个数分成若干组,每组数字之和不能大于w,问最少能分成几组。

    提示
            最简单的分组方案便是从前往后拿取数字,若组内数字之和大于w,就新建一个组。

    完整思路
            求出n个数的全排列,每次排列从前往后拿取数字,若组内数字之和大于w,就新建一个组。

    核心代码
    
    sort(a + 1, a + n + 1);
    do
    {
        int num = 1, sum = 0;
        for (int i = 1; i <= n; i++)
        {
            if (sum + a[i] > w)
            {
                sum = 0;
                num++;
            }
            sum += a[i];
        }
        ans = min(ans, num);
    } while (next_permutation(a + 1, a + n + 1));
    
    
    • 3
      @ 2023-4-16 10:19:43

      酷似二分答案的时候检验当前情况是否正确的感觉

      #include <bits/stdc++.h>
      using namespace std;
      int n , w , a[15] , ans = 100000;
      
      int count( int a[] )
      {
          int t = 1, sum = 0; //注意一下t的初始值是1即可
          for ( int i = 1; i <= n; i ++ )
          {
              sum += a[i];
              if ( sum > w )
              {
                  t ++;
                  sum = a[i];
              }
          }
          return t;
      }
      
      int main()
      {
          cin >> n >> w;
          for ( int i = 1; i <= n; i ++ ) cin >> a[i];
          sort( a , a + 1 + n );
      
          do 
          {
              int sum = count( a );
              ans = min( sum , ans );
          } while ( next_permutation( a + 1 , a + 1 + n ) );
          cout << ans << endl;
      
          system("pause");
          return 0;
      }
      
      • 2
        @ 2024-4-3 20:38:32

        P1021 缆车

        分析

        排列之后挨个判断就可以了

        代码

        #include <bits/stdc++.h> using namespace std;

        int a[105];

        int main(){ int n,w; cin>>n>>w; for (int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+n+1); int mmin=INT_MAX; do{ int sum=0; int cnt=1; for (int i=1;i<=n;i++){ sum+=a[i]; if (sum>w){ cnt++; sum=a[i]; } } mmin=min(mmin,cnt); }while (next_permutation(a+1,a+n+1)); cout<<mmin<<endl; return 0; }

        • 2
          @ 2024-3-29 19:56:18
          #include <bits/stdc++.h> 
          using namespace std;
          int main()
          {
              int n, w, ans = 9999999;
              cin >> n >> w;
              int num[n + 1];
              for (int i = 1; i <= n; i++)
              {
                  cin >> num[i];
              }
              sort(num + 1, num + n + 1);
              do
              {
                  int sum = 0, m = 1;
                  for (int i = 1; i <= n; i++)
                  {
                      if (sum + num[i] > w)
                      {
                          sum = 0;
                          m++;
                      }
                      sum += num[i];
                  }
                  ans = min(ans, m);
              } while (next_permutation(num + 1, num + n + 1));
              cout << ans;
              return 0;
          }
          
          • 0
            @ 2023-4-15 16:50:03
            #include <iostream>
            #include <algorithm>
            using namespace std;
            int n,m,ans=10000;
            int a[15];
            int main()
            {
                cin >> n >> m;
                for (int i = 1; i <= n; i++)
                {
                    cin>>a[i];
                }
                sort(a + 1, a + n + 1);
                do
                {
                    int num = 1, sum = 0;
                    for (int i = 1; i <= n; i++)
                    {
                        if (sum + a[i] > m)
                        {
                            sum = 0;
                            num++;
                        }
                        sum += a[i];
                    }
                    ans = min(ans, num);
                } while (next_permutation(a + 1, a + n + 1));
                cout << ans;
                return 0;
            }
            //已AC!不得抄袭!
            
            • -2
              @ 2024-6-10 11:21:30

              30分:

              #include<bits/stdc++.h>
              #include<algorithm>
              using namespace std;
              int n,w,a[11],money,sum=1,sum2;
              int main()
              {
                  cin>>n>>w;
                  for(int i=1;i<=n;i++)
                  {
                      cin>>a[i];
                  }
                  sort(a+1,a+n+1);
                  while(sum<n)
                  {
                      for(int i=sum;i<=n;i++)
                      {
                          if(sum2+a[i]<=w)
                          {
                              sum++;
                              sum2+=a[i];
                              if(sum>=n)
                              {
                                  break;
                              }
                          }
                      }
                      money++;
                  }
                  cout<<money+1;
                  return 0;
              }
              

              100分:

              #include <bits/stdc++.h>
              #include <algorithm>
              using namespace std;
              int n,m,ans=10000;
              int a[15];
              int main()
              {
              cin >> n >> m;
              for (int i = 1; i <= n; i++)
              {
              cin>>a[i];
              }
              sort(a + 1, a + n + 1);
              do
              {
              int num = 1, sum = 0;
              for (int i = 1; i <= n; i++)
              {
              if (sum + a[i] > m)
              {
              sum = 0;
              num++;
              }
              sum += a[i];
              }
              ans = min(ans, num);
              } while (next_permutation(a + 1, a + n + 1));
              cout << ans;
              return 0;
              }
              
              • -2
                @ 2024-3-1 22:15:02
                #include <bits/stdc++.h>
                using namespace std;
                int n,student_weight,ans=INT_MAX;
                int main(){
                	cin>>n>>student_weight;
                	vector<int>v(n);
                	for (int i=0;i<n;i++)cin>>v[i];
                	sort(v.begin(),v.end()); 
                	do{
                		int sum=0,people=1;
                		for (vector<int>::iterator it=v.begin();it!=v.end();it++){
                			if (sum+*it>student_weight){
                				people++;
                				sum=0;
                			}
                			sum+=*it;
                		}
                		ans=min(ans,people);
                	}while(next_permutation(v.begin(),v.end()));
                	cout<<ans;
                	return 0;
                }
                
                • -2
                  @ 2023-8-12 15:56:14
                  #include <bits/stdc++.h> 
                  using namespace std;
                  int main()
                  {
                      int n, w, ans = 9999999;
                      cin >> n >> w;
                      int num[n + 1];
                      for (int i = 1; i <= n; i++)
                      {
                          cin >> num[i];
                      }
                      sort(num + 1, num + n + 1);
                      do
                      {
                          int sum = 0, m = 1;
                          for (int i = 1; i <= n; i++)
                          {
                              if (sum + num[i] > w)
                              {
                                  sum = 0;
                                  m++;
                              }
                              sum += num[i];
                          }
                          ans = min(ans, m);
                      } while (next_permutation(num + 1, num + n + 1));
                      cout << ans;
                      return 0;
                  }
                  
                  • -2
                    @ 2023-7-28 22:02:37
                    #include <iostream>
                    #include <algorithm>
                    using namespace std;
                    int n,m,ans=10000;
                    int a[15];
                    int main()
                    {
                        cin >> n >> m;
                        for (int i = 1; i <= n; i++)
                        {
                            cin>>a[i];//hetao1415825
                        }
                        sort(a + 1, a + n + 1);
                        do
                        {
                            int num = 1, sum = 0;
                            for (int i = 1; i <= n; i++)
                            {
                                if (sum + a[i] > m)
                                {
                                    sum = 0;
                                    num++;
                                }
                                sum += a[i];
                            }
                            ans = min(ans, num);
                        } while (next_permutation(a + 1, a + n + 1));
                        cout << ans;
                        return 0;
                    }
                    
                    • @ 2023-8-23 8:09:23

                      楼主可以考虑改一下头文件,改为#include <bits/stdc++.h>

                    • @ 2024-3-1 22:01:29

                      @其实也差不多

                  • -4
                    @ 2023-8-10 22:02:30
                    #include <bits/stdc++.h>
                    using namespace std;
                    int main(){
                        int n,w,a[15],sum=0,cnt=0,ans=9999999;
                        cin>>n>>w;
                        for(int i=1;i<=n;i++)cin>>a[i];
                        sort(a+1,a+n+1);
                        do{
                            cnt=1,sum=0;
                            for(int i=1;i<=n;i++){
                                if(sum+a[i]>w)sum=0,cnt++;
                                sum+=a[i];
                            }
                            ans=min(ans,cnt);
                        }while(next_permutation(a+1,a+n+1));
                        cout<<ans<<endl;
                        return 0;
                    }
                    
                    • -8
                      @ 2023-11-5 19:52:06
                      #include <bits/stdc++.h>
                      using namespace std;
                      int n , w , a[15] , ans = 100000;
                      
                      int count( int a[] )
                      {
                          int t = 1, sum = 0; //注意一下t的初始值是1即可
                          for ( int i = 1; i <= n; i ++ )
                          {
                              sum += a[i];
                              if ( sum > w )
                              {
                                  t ++;
                                  sum = a[i];
                              }
                          }
                          return t;
                      }
                      
                      int main()
                      {
                          cin >> n >> w;
                          for ( int i = 1; i <= n; i ++ ) cin >> a[i];
                          sort( a , a + 1 + n );
                      
                          do 
                          {
                              int sum = count( a );
                              ans = min( sum , ans );
                          } while ( next_permutation( a + 1 , a + 1 + n ) );
                          cout << ans << endl;
                      
                          system("pause");
                          return 0;
                      }
                      
                      • 1

                      信息

                      ID
                      14
                      时间
                      1000ms
                      内存
                      256MiB
                      难度
                      4
                      标签
                      递交数
                      2156
                      已通过
                      932
                      上传者