29 条题解
-
1
注释代码里有 注意: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
思路
先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; }
记得点赞之后再开吃哦!
-
-1
# 这个包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; }
信息
- ID
- 15
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 4295
- 已通过
- 1053
- 上传者