29 条题解

  • 1
    @ 2023-10-14 17:04:38

    注释代码里有 注意:sum要开long long

    代码

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,a[10001];
    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>>a[i];
        sort(a+1,a+n+1,cmp); // 贪心一般需要对数组进行排序
        for(int i=1;i<=m;i++){ // 将价值最多的m件物品
            sum+=a[i];           // 放进艾达空间
        }
        cout<<sum;    // 输出答案
    
        return 0;
    }
    
    • 0
      @ 2024-6-8 18:05:34

      思路

      先sort排序,将sum(累加器)增加最大的那m个数(思路简单明了)

      OK,服务员,上菜~~

      #include<bits/stdc++.h>
      using namespace std;
      long long n,m,a[10005],sum;//定义
      int main() {
      	cin>>n>>m;
      	for(int i=1;i<=n;i++) cin>>a[i];//输入就不多讲了
      	sort(a+1,a+n+1);//sort排序
      	for(int i=n;i>=1;i--) {//累加器sum+=a[i]
      		sum+=a[i];
      		m--;
      		if(m==0) break;//判断前m个数
      	}
      	cout<<sum;
      	return 0;
      }
      

      记得点赞之后再开吃哦!

      • 0
        @ 2024-3-15 21:21:45
        -题目回顾- 
        小核桃的艾达空间可以存放m空间的物品,现有n件物品,第i件物品的价值为ai,每件物品都占用艾达空间1个空间的体积,请问小核桃最多可以携带多少价值的物品。
        
         -分析- 
        既然是贪心思想,从大到小累加即可
        
        -核心代码- 
        
        sort(a + 1, a + 1 + n); 
        int num = 1; for (int i = n; i >= 1; i--) 
        { 
            if (num <= m) 
            { 
                sum += a[i]; 
                num++; 
            } 
        }
        
        • 0
          @ 2023-11-26 10:34:32

          家人们我才知道,不能直接

          if (a>0)       a=3;
          

          这样表示() 人家不认 还必须换行;

          • -1
            @ 2024-3-17 21:29:22
            # 这个包AC的,信我
            #include<bits/stdc++.h>
            #include<algorithm>
            using namespace std;
            int m,n,a[10001],cnt; //cnt是指不要的低价值物品数量(索引)
            long long sum; //这个数很大,建议long long
            int main(){
            cin >> n >> m;
            for (int i=1;i<=n;i++)
            {
            cin >> a[i];
            sum+=a[i]; //将sum的值初始为所有物品的总价值
            }
            sort(a+1,a+n+1); //低价值的先排在前面
            if (n>m) //数量大于空间
            {
            while (n-cnt>m) //重复执行,直到携带的物品数等于空间
            {
            cnt++; // 因为数量已经大于空间,所以先加一个低价值物品
            sum -= a[cnt]; //总量此时要减去低价值物品的价值
            }
            }
            cout << sum;
            return 0;
            }
            
            
            
            • -1
              @ 2024-3-16 22:37:35

              首先,通过题目,我们可以知道,该题可以看作一个简单的排序。 贪心有一个共同点,就是都需要排序。 sort(列表+1,列表+n+1); 其次,通过题目,我们知道该题要求求最大值,由于物品代价都为1,所以可以视为求价值前m的物品的总和。 reverse(列表+1,列表+n+1); 然后求for(i=1;i<=m;i++)的a[i]的总和就可以了

              • -1
                @ 2024-3-15 21:16:37

                sort(a + 1, a + 1 + n); int num = 1; for (int i = n; i >= 1; i--) { if (num <= m) { sum += a[i]; num++; } }

                • -1
                  @ 2024-3-15 21:15:35

                  -题目回顾- 小核桃的艾达空间可以存放m空间的物品,现有n件物品,第i件物品的价值为ai,每件物品都占用艾达空间1个空间的体积,请问小核桃最多可以携带多少价值的物品。 -分析- 既然是贪心思想,从大到小累加即可 -核心代码- sort(a + 1, a + 1 + n); int num = 1; for (int i = n; i >= 1; i--) { if (num <= m) { sum += a[i]; num++; } }

                  OK!

                  • -7
                    @ 2023-11-22 17:10:35

                    11111

                    信息

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