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;
}