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

题目描述

有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;
}
相关推荐
孤飞5 小时前
zero2Agent:面向大厂面试的 Agent 工程教程,从概念到生产的完整学习路线
算法
技术专家6 小时前
Stable Diffusion系列的详细讨论 / Detailed Discussion of the Stable Diffusion Series
人工智能·python·算法·推荐算法·1024程序员节
csdn_aspnet7 小时前
C# (QuickSort using Random Pivoting)使用随机枢轴的快速排序
数据结构·算法·c#·排序算法
鹿角片ljp7 小时前
最长回文子串(LeetCode 5)详解
算法·leetcode·职场和发展
paeamecium9 小时前
【PAT甲级真题】- Cars on Campus (30)
数据结构·c++·算法·pat考试·pat
chh5639 小时前
C++--模版初阶
c语言·开发语言·c++·学习·算法
RTC老炮10 小时前
带宽估计算法(gcc++)架构设计及优化
网络·算法·webrtc
dsyyyyy110110 小时前
计数孤岛(DFS和BFS解决)
算法·深度优先·宽度优先
会编程的土豆11 小时前
01背包与完全背包详解
开发语言·数据结构·c++·算法
汀、人工智能11 小时前
[特殊字符] 第86课:最大正方形
数据结构·算法·数据库架构·图论·bfs·最大正方形