总之从大到小填充,贪心放置;
6,5,4,3都要自己独立的礼盒;剩下的空隙尽量填充2,然后全部塞入1
#include <cstdio> #include <cmath> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int u[4] = {0,5,3,1}; int a[7]; int main() { while(scanf("%d",&a[1])==1){ bool flag=false; for(int i=1;i<=6;i++){ if(i>1) scanf("%d",&a[i]); if(a[i]) flag=true; } if(!flag) break; int M = a[6]+a[5]+a[4]+ceil(a[3]*1.0/4); int L = a[4]*5+u[a[3]%4]; if(L < a[2]) M+=ceil((a[2]-L)*1.0/9); int N = M*36-a[6]*36-a[5]*25-a[4]*16-a[3]*9-a[2]*4; if(N < a[1]) M += ceil((a[1]-N)*1.0/36); printf("%d\n",M); } return 0; }