29 条题解

  • 27
    @ 2023-9-2 21:10:54

    我又来写题解辣。 讲讲我的诗路。 此题啊题解作者我认为用循环就能解决。

    题目回顾

    来来来回忆分析一下题是森马意思。

    题目原文: 小核桃的艾达空间可以存放m空间的物品,现有n件物品,第i件物品的价值为a[i],每件物品都占用艾达空间1个空间的体积,请问小核桃最多可以携带多少价值的物品。

    解析

    第一行:n,m两个数。n用来告诉你总共要输入几个数,要输出最大m个数的和。可能m会>n,这个样例2就是这种情况,这种情况你把所有数都加一遍就行啦。

    第二行:有n个数要输入进数组。

    来,题目解释一下: 有n个数,其中要你挑选m个数且和最大,要你输出这m个数最大的和是多少。

    题目解释明白了吧,别管他这个题目是什么背景,就是这么个大意。

    样例分析

    我在这里选取第二个样例,第二个明白了所有的也就明白了。

    样例数据

    输入: 第一行:5 7 第二行:3 1 4 1 5

    输出: 14

    我们来分析一下,按照上面我解释的意思,答案14 = (最大的)5+(次大的)4+……+(第m-1大的)1+(第m大的)1。

    明白了吗?上代码

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n,m,zhenwuyu[100005];
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        {
            cin>>zhenwuyu[i];//是个人出的题目啊他就得输入。
        }
        sort(a+1,a+n+1);//排一下序
        int sum=0;
        int ans=0;//sum用来统计下面的循环循环了多扫次
        //num统计答案。
        for(int i=n;i>=1;i--)
        {
            sum++;//循环一次咋就得加一吧,不然你判断神马玩意啊。
            if(sum>m)
            {
                break;//重中之重,一定不能丢!!!如果循环地刺苏>m(要输多了),就赶紧停了,不然又瞎加的。
                //判断丢了以后代码就帮你把全部数字之和都加了一遍,然后让你非常崩溃的调试。
            }
            ans+=zhenwuyu[i];
        }
        cout<<ans;
    }
    
    • @ 2023-9-2 21:14:04

      明白了吗?赶紧点个赞再抱走吧,楼主编辑也很不容易哒。[快哭了][快哭了]

    • @ 2023-9-2 21:19:05

      请勿直接一口复制粘贴吞噬,会被封号噎死的。

      尽量自己动脑写一遍,自己写一遍(哪怕是对着打也有一点印象)加深记忆理解。

    • @ 2023-10-22 20:54:20

      你看看排序有没有问题

    • @ 2024-2-1 19:03:41

      ans记得要开long long

  • 6
    @ 2023-8-6 23:21:14

    P1022

    -题目回顾-

    小核桃的艾达空间可以存放m空间的物品,现有n件物品,第i件物品的价值为ai,每件物品都占用艾达空间1个空间的体积,请问小核桃最多可以携带多少价值的物品。


    -分析-

    输入a[1],a[2]~a[n]从大到小排序,这里定义一个布尔类型函数cmp表示排序规则,放在sort函数里实现从大到小排序,最后编写程序即可


    -代码-

    #include <bits/stdc++.h>
    using namespace std;
    long n, m, sum;
    long aida[10005];
    bool cmp(int x, int y)
    {
        return x > y;
    }//定义排序规则
    int main()// by AGOMG
    {
        cin >> n >> m;
        for(int i = 1; i <= n; i++)
            cin >> aida[i];
        sort(aida + 1, aida + n + 1, cmp);
        for(int i = 1; i <= m; i++)
            sum += aida[i];
        cout << sum;
        return 0;
    }
    
    • 4
      @ 2023-7-14 12:28:50

      sort函数有一个参数comp决定了sort函数的排序方式,默认为less即从小到大,通过传入greater<>()可以将其排序方式改为从大到小,这样从前往后装直到装不下即可,这种方式最简单。

      #include <iostream>
      #include <algorithm>
      using namespace std;
      int main()
      {
      int m,n;
      long long int a[10005],sum=0;//这里需要使用long long int
      cin>>n>>m;
      for(int i=1;i<=n;i++)
      cin>>a[i];
      sort(&a[1],&a[n+1],greater<>());
      for(int i=1;i<=m&&i<=n;i++){//可能存在m>n的情况,因此加上&&i<=n的判断条件
      sum+=a[i];
      }
      cout<<sum;
      }
      
      • 3
        @ 2024-4-26 20:51:59

        一赞拿走

        #include <iostream>
        #include <algorithm>
        using namespace std;
        int main()
        {
            long long n, m, a[10005], sum = 0;
            cin >> n >> m;
            for (int i = 1; i <= n; i++)
            {
                cin >> a[i];
            }
            sort(a + 1, a + n + 1);
            for (int i = n; i >= 1; i--)
            {
                sum += a[i];
                m--;
                if (m == 0 || i == 1)
                {
                    cout << sum;
                    return 0;
                }
            }
        }
        

        笑话时间到(3个) 1:今天去买水果,我问一个摊主:别人家的瓜都写着不甜包退,你怎么不敢写呢,瓜不好吧。摊主:不买滚,我他么卖的是苦瓜…… 2:一个路人拦下计程车,他问司机:从这儿到机场要多久?司机:要很久的。路人:起码要多久?司机:骑马要更久。 3:在游泳池戏水,突然想放屁。没憋住,身后冒起一大串泡泡。旁边小姑娘哇地一声哭了:“妈妈快跑,水开了!” 笑话结束,点个赞吧,求求了; 下一个题还有三个,期待吧。。。。。。

        • 3
          @ 2023-11-26 11:45:14

          挑战全网行数最少(4行)

          #include <bits/stdc++.h>
          long int n, m, a[10000], sum;
          bool cmp(int a, int b){return a > b;}
          int main(){scanf("%ld%ld", &n, &m);for (int i = 0;i < n;i++) scanf("%ld", &a[i]); std::sort(a, a + n, cmp);for (int i = 0;i < m;i++) sum += a[i]; printf("%ld", sum);}
          

          !!!请勿一口嘎资掉!!!

          • @ 2024-3-10 11:58:35

            名字太长了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

          • @ 2024-4-12 20:31:03

            老大厉害,小弟捧走了

          • @ 2024-4-15 22:16:54

            🚀️ 太6了!!!🚀️

        • 3
          @ 2023-9-24 11:37:00
          using namespace std;
          bool cmp(long int a,long int b)
          {
          return a > b;
          }
          int main()
          {
          long long a[10005];
          long int m,n;
          cin >> n >> m;
          for (long int i = 1;i <= n;i++)
          {
          cin >> a[i];
          }
          sort (a + 1,a + n + 1,cmp);
          long int sum = 0;
          for (long int i = 1;i <= m && i <= n;i++)
          {
          sum += a[i];
          }
          cout << sum;
          return 0;
          }
          

          long int 或long long sum 不要忘了!!!

          • 3
            @ 2023-2-27 17:11:36
            题目大意
                    存在一个m空间的背包,有n件物品,第i件物品的价值为ai,占用空间为1,求背包最多能装物品的价值。

            提示
                    优先装价值高的物品。

            完整思路
                    将n件物品排序,从大到小加到背包中。

            核心代码
            
            sort(a + 1, a + 1 + n);
            int num = 1;
            for (int i = n; i >= 1; i--)
            {
                if (num <= m)
                {
                    sum += a[i];
                    num++;
                }
            }
            
            
            提示
                    注意数据范围。

            • 2
              @ 2024-4-15 22:15:12

              这是本蒟蒻第一次写题解,请大家多多关照哈😄

              题目描述

              小核桃的艾达空间可以存放m空间的物品,现有n件物品,第i件物品的价值为ai,每件物品都占用艾达空间1个空间的体积,请问小核桃最多可以携带多少价值的物品。

              输入格式

              第一行输入两个正整数 n,m,表示物品的数量和艾达空间的体积。

              第二行内输入 n 个正整数,用空格间隔,第i个整数表示第i个物品的价值 ai。

              输出格式

              小核桃最多可以携带物品的总价值。


              题目思路

              这道题简单来说就是写一个cmp函数,让sort(a+1,a+n+1,cmp)把数组从大到小排序,然后每次加上剩下的物品中价值最大的就可以了


              附上AC代码

              #include <iostream>
              #include <algorithm>
              using namespace std;
              long long a[10005],n,m,value=0;
              bool cmp(int x, int y)
              {
                  return x > y;
              }
              int main()
              {
                  cin >> n >> m;
                  for(int i=1;i<=n;i++)
                  {
                      cin >> a[i]; 
                  }
                  sort(a+1,a+n+1,cmp);
                  for(int i=1;i<=m;i++)
                  {
                      value+=a[i];
                  }
                  cout << value;
                  return 0;
              }
              

              注意注意❗❗❗

              变量一定要用LONG LONG型,不然系统会崩!!!会RE!!!

              本人亲测,只得了20分!!!


              最后说一句,小核桃带那么多贵重物品,不怕弄丢被抢劫吗?!


              大家请勿欢迎一口吞掉,不然会噎死的不要管老师!

              欢迎来我的个人主页玩~~~

              https://oj.hetao101.com/d/extra_training/user/12718

              • @ 2024-4-15 22:27:35

                点个赞吧,求求了🥺🥺🥺

            • 2
              @ 2023-10-2 16:22:34

              hin简单:

              思路是这样的:

              首先排序,建议用cmp,防止脑袋转不过来,

              然后遍历1~min(m,n)

              注意!!!!!!

              1~min(m,n)

              min要加上,因为循环次数太多没意义是吧

              (提示:第一次编译是C++产生目标文件的一次,如果像我这样配置不好,可能会花点时间,别以为TLE了,反正我是过了)

              已AC,请放心食用

              上菜:

              #include <iostream>
              #include <algorithm>
              using namespace std;
              bool cmp(int x,int y){
                  return x>y;
              }
              int main(){
                  int m,n;
                  long long a[10005],sum=0;
                  cin>>n>>m;
                  for(int i=1;i<=n;i++)cin>>a[i];
                  sort(a+1,a+n+1,cmp);
                  for(int i=1;i<=min(m,n);i++)sum+=a[i];
                  cout<<sum<<endl;
                  return 0;
              }
              
              • 2
                @ 2023-9-10 9:44:09
                #include <iostream>
                #include <algorithm>
                using namespace std;
                int main()
                {
                    long long n, m, a[10005], sum = 0;
                    cin >> n >> m;
                    for (int i = 1; i <= n; i++)
                    {
                        cin >> a[i];
                    }
                    sort(a + 1, a + n + 1);
                    for (int i = n; i >= 1; i--)
                    {
                        sum += a[i];
                        m--;
                        if (m == 0 || i == 1)
                        {
                            cout << sum;
                            return 0;
                        }
                    }
                }
                
                • 2
                  @ 2023-9-10 9:42:24
                  #include <iostream>
                  #include <algorithm>
                  using namespace std;
                  int main()
                  {
                      long long n, m, a[10005], sum = 0;
                      cin >> n >> m;
                      for (int i = 1; i <= n; i++)
                      {
                          cin >> a[i];
                      }
                      sort(a + 1, a + n + 1);
                      for (int i = n; i >= 1; i--)
                      {
                          sum += a[i];
                          m--;
                          if (m == 0 || i == 1)//注意点, 如果空间大于物品数量,需要把所有价值相加
                          {
                              cout << sum;
                              return 0;
                          }
                      }
                  }
                  
                  • 2
                    @ 2023-9-3 14:56:28

                    yasuo👀️ 这题有坑f了

                    #include <iostream>
                    #include <algorithm>
                    int yasuo(long a,long b){return a>b;}
                    int main(){
                        long n,m,a[10005],sum=0; std::cin>>n>>m; m=m>n?n:m; for(int i=0;i<n;i++)std::cin>>a[i]; 
                        std::sort(a,a+n,yasuo); for(int i=0;i<m;i++)sum+=a[i]; std::cout<<sum; return 0;}
                    
                    • 2
                      @ 2023-8-17 15:29:48

                      题目描述

                      小核桃的艾达空间可以存放m空间的物品,现有n件物品,第i件物品的价值为��ai,每件物品都占用艾达空间1个空间的体积,请问小核桃最多可以携带多少价值的物品。

                      输入格式

                      第一行输入两个正整数 n,m,表示物品的数量和艾达空间的体积。

                      第二行内输入 n个正整数,用空格间隔,第i个整数表示第i个物品的价值 ai。

                      输出格式

                      小核桃最多可以携带物品的总价值。

                      ———————————————————

                      就是求N个数中 M个数字的和 的最大值 1,从大到小排列, 2,选价值高的min(n,m)个东西 易错 ——人家没说N>M—— 见祖宗人们——不开LONG LONG见祖宗~—— ——看一下数据范围—— 对于 50% 的数据,1≤n,m≤10000 0≤ai≤10000

                      对于 100%的数据,1≤n,m≤10000,0≤ai≤1e9。 sum最多1e13

                      #include<bits/stdc++.h>
                      using namespace std;
                      int n,m,q[10000];
                      long long sum;//易错
                      bool cmp(int a,int b)
                      {
                      return a>b;
                      }
                      int main()
                      {
                      cin>>n>>m;
                      for(int i=1;i<=n;i++)cin>>q[i];
                      sort(q+1,q+n+1,cmp);
                      for(int i=1;i<=min(n,m);i++)
                      {
                      sum+=q[i];
                      }
                      cout<<sum;
                      return 0;
                      }
                      
                      
                      
                      • 2
                        @ 2023-4-22 21:48:39
                        #include <bits/stdc++.h>
                        #define maxn 10001
                        using namespace std;
                        int n,cnt,m;
                        long long a[maxn],sum;
                        bool cmp(int a,int b)
                        {
                            return a > b;
                        }
                        int main()
                        {
                            scanf("%d%d",&n,&m);
                            for (int i = 1;i <= n;i ++)
                            {
                                scanf("%lld",&a[i]);
                            }
                            sort(a + 1,a + n + 1,cmp);
                            cnt = m;
                            for (int i = 1;i <= n;i ++)
                            {
                                sum += a[i];
                                cnt --;
                                if(cnt == 0)
                                {
                                    break;
                                }
                            }
                            printf("%lld",sum);
                            return 0;
                        }
                        

                        //第一眼还以为是dp😂

                        • 2
                          @ 2023-4-22 19:01:53
                          #include <iostream>
                          #include <algorithm>
                          using namespace std;
                          long long sum;
                          int a[100005],n,m,num=1;
                          
                          int main(){
                              cin>>n>>m;
                              for(int i=1;i<=n;i++)
                              {
                                  cin>>a[i];
                                 //禁盗
                                  
                              }
                              sort(a+1,a+1+n);
                              for(int i=n;i>=1;i--)
                              {
                                  if(num<=m)
                                  {
                                      sum+=a[i];
                                      num++;
                                  }
                              }
                              cout<<sum;
                              return 0;
                          }
                          

                          Copy

                          • 2
                            @ 2023-4-21 20:27:10
                            #include <algorithm>
                            using namespace std;
                            long long sum;
                            int a[100005],n,m,num=1;
                            
                            int main(){
                                cin>>n>>m;
                                for(int i=1;i<=n;i++)
                                {
                                    cin>>a[i];
                                   //禁盗
                                    
                                }
                                sort(a+1,a+1+n);
                                for(int i=n;i>=1;i--)
                                {
                                    if(num<=m)
                                    {
                                        sum+=a[i];
                                        num++;
                                    }
                                }
                                cout<<sum;
                                return 0;
                            }
                            
                            
                            ``
                            
                            • @ 2023-4-22 15:45:17

                              得要在第一行加

                              #include <iostream>
                              

                              还请注意

                            • @ 2023-4-22 15:45:44

                              @ 最后的

                              ``
                              

                              也要去掉

                          • 2
                            @ 2023-4-21 20:26:11

                            P1022 简易背包

                            题目描述

                            小核桃的艾达空间可以存放m空间的物品,现有n件物品,第i件物品的价值为ai,每件物品都占用艾达空间1个空间的体积,请问小核桃最多可以携带多少价值的物品。


                            思路

                            肯定先装大的,就比如有一堆大小都有的蛋糕,给你一堆大于这些蛋糕的盒子,让你装回去吃,那肯定是先装大的。将n件物品排序,从大到小加到背包中


                            注意:

                            1.50分的话那是没有用long long。

                            2.头文件要有<algorithm>


                            参考代码

                            #include <iostream>//hetao3097453
                            #include <algorithm>
                            using namespace std;
                            long long a[10000];
                            int main()
                            {
                                long long n,m,sum = 0;
                                cin >> n >> m;
                                for(long long i = 1;i <= n;i++)
                                {
                                    cin >> a[i];
                                }
                                sort(a + 1,a + n + 1);
                                for(long long i = n;i >= 1;i--)
                                {
                                    if(m != 0)
                                    {
                                        sum += a[i];
                                        m--;
                                    }
                                }
                                cout << sum;
                                return 0;
                            }
                            
                            

                            hetao3097453

                            2023年4月21日

                          • 2
                            @ 2023-4-21 19:21:53
                            #include <iostream>
                            #include <algorithm>
                            using namespace std;
                            long long sum;
                            int a[100005],n,m,num=1;
                            
                            int main(){
                                cin>>n>>m;
                                for(int i=1;i<=n;i++)
                                {
                                    cin>>a[i];
                                   //禁盗
                                    
                                }
                                sort(a+1,a+1+n);
                                for(int i=n;i>=1;i--)
                                {
                                    if(num<=m)
                                    {
                                        sum+=a[i];
                                        num++;
                                    }
                                }
                                cout<<sum;
                                return 0;
                            }
                            
                            
                            
                            • 1
                              @ 2024-6-9 21:07:08
                              上菜,请食用
                              #include <bits/stdc++.h>
                              using namespace std;
                               int n,m,a[100005];
                              int main()
                              {
                                  cin>>n>>m;
                                  for(int i=1;i<=n;i++)
                                  {
                                      cin>>a[i];
                                  }
                                  sort(a+1,a+n+1);
                                  int sum=0;
                                  long long ans=0;
                                  for(int i=n;i>=1;i--)
                                  {
                                      sum++;
                                      if(sum>m)
                                      {
                                          break;
                                      }
                                      ans+=a[i];
                                  }
                                  cout<<ans;
                                  return 0;
                              }
                              
                              • 1
                                @ 2023-11-25 22:29:14

                                既然是贪心思想,从大到小累加即可

                                #include <bits/stdc++.h>
                                using namespace std;
                                int main(){
                                    long long m, n, a[10005], sum = 0;//定义变量
                                    cin >> n >> m;
                                    for (int i = 1; i <= n; i++){
                                        cin >> a[i];
                                    }
                                    sort(a+1, a+n+1);//排个序
                                    for (int i = 1; i <= m && i <= n;/*为了防止m<n时sum加进去一些怪东西所以写两个判断*/ i++){
                                        sum += a[n-i+1];//sort函数从小到大排序,我们要从大到小加,所以减去i,再加1
                                    }
                                    cout << sum;
                                    return 0;
                                }
                                

                                这已经是我这个笨比能想到的最短写法了,点个赞吧,球球了👀️

                                信息

                                ID
                                15
                                时间
                                1000ms
                                内存
                                256MiB
                                难度
                                7
                                标签
                                递交数
                                4295
                                已通过
                                1053
                                上传者