#include<iostream> using namespace std; //一开始想错了,总是在考虑相邻箱子的合 然后再去分情况,但实际上每次都遍历已经存在的箱子的大小即可。 int main() { int n; cin >> n; int *goodsWeight = new int[n]; for(int i = 0;i < n;i++) cin >> goodsWeight[i]; int *boxIndex = new int[n]; int *boxSize = new int[n]; int numBox = 0; for(int i = 0;i < n;i++) boxSize[i] = 100; for(int j = 0;j < n;j++) { for(int i = 0;i <= j;i ++)//等于j if(boxSize[i] >= goodsWeight[j]) { if(boxSize[i] == 100) // 数箱子的数目是个问题 numBox ++; boxIndex[j] = i; boxSize[i] -= goodsWeight[j]; break; } } for(int i = 0;i < n;i++) cout<<goodsWeight[i]<<" "<<boxIndex[i] + 1<<endl; cout<<numBox <<endl; return 0; }