Skip to content

M01017: 装箱问题

greedy, http://cs101.openjudge.cn/pctbook/M01017/

cpp
#include<bits/stdc++.h>
using namespace std;
int a[10], sum, a2, a1;
bool flag;
int main(){
    while(1){
        flag = 0;
        for(int i = 1; i <= 6; i++){
            scanf("%d", &a[i]);
            if(a[i])
                flag = 1;
        }
        if(!flag)
            break;

        sum = a[6] + a[5] + a[4] + a[3]/4 + (a[3]%4 ? 1 : 0);
        a2 = a[4] * 5;
        a1 = a[5]*11 + a[4]*20 + (a[3]%4 ? ((4 - a[3]%4)*9) : 0);
        if(a[3]%4 == 3) a2 += 1;
        else if(a[3]%4 == 2) a2 += 3;
        else if(a[3]%4 == 1) a2 += 5;
        a1 -= 4 * min(a[2], a2);
        a[2] -= a2;
        if(a[2] > 0){
            sum += a[2]/9;
            if(a[2]%9){
                sum++;
                a1 += 36 - a[2]%9 * 4;
            }
        }
        a[1] -= a1;
        if(a[1] > 0)
            sum += a[1]/36 + (a[1]%36 ? 1 : 0);
        printf("%d\n", sum);
    }
    return 0;
}
cpp
# 
#include <iostream>
using namespace std;

int main() {
    int remain[4] = {0, 5, 3, 1};
    while(true) {
        int arr[6], count=0;
        bool status=false;
        for(int i=0; i<6; i++)  {
            cin>>arr[i];
            if(arr[i]!=0) status=true;
        }
        if(status == false){break;}
        count += arr[5]+arr[4]+arr[3]+(arr[2]+3)/4;
        int num1 = arr[3]*5+remain[arr[2]%4];
        if(arr[1]>num1) {
            count += ((arr[1]-num1)+8)/9;
        }
        int num2=count*36-25*arr[4]-36*arr[5]-16*arr[3]-9*arr[2]-4*arr[1];
        if(arr[0]>num2) {
            count += ((arr[0]-num2)+35)/36;
        }
        cout<<count<<'\n';
    }
    return 0;
}