装箱问题

假设有N项物品,大小分别为s1,s2….si….sn,其中si为满足0<=si<=100的整数。要把这些物品装入到容量为100的一批箱子(序号1-N)中。装箱方法是:对每项物品, 顺序扫描箱子,把该物品放入足以能够容下它的第一个箱子中。请写一个程序模拟这种装箱过程,并输出每个物品所在的箱子序号,以及放置全部物品所需的箱子数目。

输入格式:
输入第一行给出物品个数N(<=1000);第二行给出N个正整数si(0<=si<=100,表示第i项物品的大小)。

1
2
3
4
5
6
7
8
9
10
11
12
13
输入样例:
8
60 70 80 90 30 40 10 20
输出样例:
60 1
70 2
80 3
90 4
30 1
40 5
10 1
20 2
5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<bits/stdc++.h>
using namespace std;
#define MAX 1000
int s[MAX],v[MAX];
vector<pair<int,int> > mp;
int n;
int main()
{
cin>>n;
for(int i=0;i<n;i++)
s[i]=100;
for(int j=0;j<n;j++){
cin>>v[j];
for(int i=1;i<=n;i++){
if(s[i]>=v[j]){
mp.push_back(make_pair(v[j],i));
s[i]-=v[j];
break;
}
}
}
for(int i=0;i<mp.size();i++){
cout<<mp[i].first<<" "<<mp[i].second<<endl;
}
cout<<mp.size()<<endl;

}