记《2023全国青少年信息素养大赛智能算法应用挑战赛复赛小学组》之第三题、滑雪板打包问题
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容。每个滑雪板的重量 Gi,和长度 Li,请计算需要最少多长的木板才能将所有的滑雪板。的,现在需要把排列好的滑雪板用木板做成木箱封装好进行快递,每次快递的总重。放在一起,使用与最长滑雪板长度相同的两个木板进行固定。一家新开业的滑雪场,需要采
·
【题目描述】
一家新开业的滑雪场,需要采购不同规格的滑雪板,每个滑雪板的长度是不固定
的,现在需要把排列好的滑雪板用木板做成木箱封装好进行快递,每次快递的总重
量是有限制的,不能超过重量 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考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容
更多推荐



所有评论(0)