1 条题解
-
0
🧠 解题思路(贪心策略)
我们从大的物品优先处理(贪心策略),这样可以尽量减少剩余空间的碎片。
✅ 步骤如下:
先处理所有的 包: 一个 的物品刚好占满一个箱子,占用 单位空间。
然后处理 的包:
每个 占 单位空间,还剩 ,可以放 个 。
然后是 的包:
每个 占 单位空间,还剩 ,可以放最多 个 ,剩下用 补足。
的处理稍复杂:
个 正好可以填满一个箱子()。
若不足 个,需要进行分类讨论,组合剩下的位置尽可能用 ,再用 补空。
的处理:
每个 占 单位,一个箱子最多可放 个()。
的处理:
一个箱子最多可装 个 。
代码实现
#include <iostream> using namespace std; int seq[4]={0,5,3,1};//表示分配完3*3产品剩余3*3产品数对应剩余2*2的空位数 int main() { int product[6],packets,twos,ones; bool flag; while(true) { int i; flag=false; for(i=0;i<6;i++) { cin>>product[i]; if(product[i]>0) flag=true; } if(!flag) break; packets = product[5]+product[4]+product[3]+(product[2]+3)/4; twos = product[3]*5+seq[product[2]%4]; if(product[1]>twos) { packets += (product[1]-twos+8)/9; } ones = 36*packets-36*product[5]-25*product[4]-16*product[3]-9*product[2]-4*product[1]; if(product[0]>ones) { packets += (product[0]-ones+35)/36; } cout<<packets<<endl; } return 0; }
- 1
信息
- ID
- 18
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者