【题目描述】

一家新开业的滑雪场,需要采购不同规格的滑雪板,每个滑雪板的长度是不固定
的,现在需要把排列好的滑雪板用木板做成木箱封装好进行快递,每次快递的总重
量是有限制的,不能超过重量 G。只要每次打包的重量不超过 G,多个滑雪板可以摞
放在一起,使用与最长滑雪板长度相同的两个木板进行固定。假设,给出排列好的
每个滑雪板的重量 Gi,和长度 Li,请计算需要最少多长的木板才能将所有的滑雪板
把包好。

【输入格式】

输入的第一行有两个数字,一个是滑雪板的个数,一个是包裹总重量。
以下滑雪板个数行,每行的第一个数是滑雪板的重量 Gi和长度 Li。

【输出格式】

输出需要最少的木板的总长度。注:每次打包需要 2 个木板。

【样例输入】(测试数据不包含本样例)

5 5
2 1
1 2
1 3
2 3
2 2

【样例输出】

10

C++实现

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int MAXH=100;
int main(){
	int n,weight;//滑板的数量n,滑板的重量weight
	cin>>n>>weight;
	int w[MAXH],l[MAXH];
	for(int i=1;i<=n;i++){
		cin>>w[i]>>l[i];
	}
	//使用冒泡排序法按长度对滑雪板排序
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n-i;j++){
			if(l[j]<l[j+1]){//交换长度
			int templ=l[j];
			l[j]=l[j+1];
			l[j+1]=templ;
			//按照长度交换对应重量
			int tempw=w[j];
			w[j]=w[j+1];
			w[j+1]=tempw;
			}
		}
	}
	int totall=0;//总木板数量
	int currew=0;//重量总值
	int maxl=0;
	for(int i=1;i<=n;i++){
		if(currew+w[i]>weight){
			totall+=2*maxl;
			currew=w[i];
			maxl=l[i];
		}else{
			currew+=w[i];
			maxl=max(maxl,l[i]);
		}
	}
	totall+=2*maxl;
	cout<<totall<<endl;
	return 0;
}



在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐