裝箱問題

浪裡小白菜發表於2020-12-06

裝箱問題

假設有N項物品,大小分別為s​1、s​2、…、s​i、…、sN,其中s​i為滿足1≤s​i​​ ≤100的整數。要把這些物品裝入到容量為100的一批箱子(序號1-N)中。裝箱方法是:對每項物品, 順序掃描箱子,把該物品放入足以能夠容下它的第一個箱子中。請寫一個程式模擬這種裝箱過程,並輸出每個物品所在的箱子序號,以及放置全部物品所需的箱子數目。

輸入格式:
輸入第一行給出物品個數N(≤1000);第二行給出N個正整數s
​i
​​ (1≤s
​i
​​ ≤100,表示第i項物品的大小)。

輸出格式:
按照輸入順序輸出每個物品的大小及其所在的箱子序號,每個物品佔1行,最後一行輸出所需的箱子數目。

輸入樣例:
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
(300分)
作者
DS課程組
單位
浙江大學
程式碼長度限制
16 KB
時間限制
400 ms
記憶體限制
64 MB

C++程式碼

// An highlighted block
#include<iostream>
using namespace std;
#define X 1000
int main()
{
    int N,sum=0,MAX=0;
    cin>>N;
    int a[X];
    int b[X],c[X];
    for(int i=0;i<N;i++)
        cin>>a[i];
    for(int i=0;i<N;i++)
    {
        b[X]=0;
        c[X]=0;
    }
    for(int i=0;i<N;i++)
    {
        sum=0;
       // if(a[i]!=0)
            for(int j=i;j<N;j++)
            {
                sum=a[j]+sum;
                if(sum<=100&&a[j]!=0)
                {
                    b[j]=a[j];
                    a[j]=0;
                    c[j]=i+1;
                }
                else
                {
                    sum=sum-a[j];
                }
            } 
    }
    for(int i=0;i<N;i++)
        cout<<b[i]<<" "<<c[i]<<endl;
    MAX=c[0];
    for(int i=1;i<N;i++)
        if(MAX<c[i])
            MAX=c[i];
    cout<<MAX;
    return 0;
}

相關文章