【晴问算法】入门篇—贪心算法—最优装箱

题目描述

有n 个箱子需要装上一艘轮船,已知第i 个箱子的重量为wi,轮船的载重为W。

问在不超过轮船载重的前提下,最多能把多少个箱子装上轮船。

输入描述

输出描述

输出两个整数,分别表示能装上轮船的箱子个数和总重量,用空格隔开。

样例1
输入

5 11

7 2 9 1 11

输出

3 10

解释

能将重量分别为7、2、1的箱子装上轮船(此时箱子个数最多),总重量为10。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

int a[100005]; //表示每个箱子的重量
int main(){
	int i,n,W;
	int sum = 0; //sum表示当前已拿箱子的总重量
	int cnt = 0; //cnt表示当前已拿箱子的数量
	scanf("%d%d",&n,&W); //n表示箱子个数,W表示轮船最大载重
	for(i=0;i<n;i++){
		scanf("%d",&a[i]); //读入每个箱子的重量
	}
	sort(a,a+n); //按箱子的重量从小到大排序,贪心策略是优先选择重量小的箱子
	for(i=0;i<n;i++){
		if(sum+a[i]>W) break; //如果拿了当前的箱子会导致超重的话,就不再继续拿箱子
		else{//如果不会超重,那么拿当前的箱子
			cnt++; //已拿箱子个数加1
			sum+=a[i];//已拿箱子的总重量加上新拿箱子的重量
		}
	}
	printf("%d %d\n",cnt,sum);
	return 0;
}
相关推荐
I_LPL5 分钟前
day36 代码随想录算法训练营 动态规划专题4
java·算法·leetcode·动态规划·hot100
ab1515175 分钟前
2.24完成129、134、135
数据结构·算法
2301_816997887 分钟前
虚拟DOM与Diff算法
前端·vue.js·算法
闻缺陷则喜何志丹7 分钟前
P8153 「PMOI-5」送分题/Yet Another Easy Strings Merging|普及+
c++·数学·算法·洛谷
tankeven10 分钟前
HJ102 字符统计
c++·算法
升讯威在线客服系统16 分钟前
从 GC 抖动到稳定低延迟:在升讯威客服系统中实践 Span 与 Memory 的高性能优化
java·javascript·python·算法·性能优化·php·swift
We་ct24 分钟前
LeetCode 199. 二叉树的右视图:层序遍历解题详解
前端·算法·leetcode·typescript·广度优先
孤独的追光者24 分钟前
MATLAB导出滤波器参数至ADSP中使用
算法·matlab
鲨辣椒1008632 分钟前
线程函数接口补充
java·开发语言·算法
0 0 040 分钟前
CCF-CSP 33-2 相似度计算(jaccard)【C++】考点:STL容器(set/map)
开发语言·c++·算法