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

题目描述

有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;
}
相关推荐
致Great5 小时前
Pi 的上下文压缩,到底是怎么工作的?
算法
watersink6 小时前
机器学习聚类算法
算法·机器学习·聚类
luj_17687 小时前
桥牌思维启示:系统设计的模块化架构
c语言·开发语言·c++·经验分享·算法
饼饼学习空间智能9 小时前
家庭服务机器人训练数据怎么积累?仿真、真实采集与持续学习的技术路线分析
人工智能·算法·机器学习
蛋先生DX10 小时前
你瘦不下来但大模型可以:量化原理了解一下
深度学习·算法·llm
牛阿大11 小时前
LQR算法
算法
(╹◡╹)12 小时前
18.剪枝
算法·机器学习·剪枝
Fa_Mian_Tuan13 小时前
图论基础|邻接矩阵超详细讲解(含无向/有向/带权图+完整可运行C语言代码)
c语言·数据结构·笔记·算法·图论
hanhahai13 小时前
指针与函数(函数指针与指针函数)
算法