贪心算法1017

题目大意:

给出1*1,2*2,3*3,4*4,5*5,6*6,的正方形盒子数目,要求被装在6*6的盒子里,最少能够用几个盒子?

解题思路:

先从6*6盒子考虑,没有空余,5*5盒子有11个1*1空余,4*4剩下的空间先填充2*2,再填充1*1,3*3剩下的分为等于3,2,1时的情况讨论,最后分割2*2,1*1.

代码:

#include <iostream>
using namespace std;
int main()
{
   int a,b,c,d,e,f,sum=0,k,z;
   while(cin>>a>>b>>c>>d>>e>>f&&(a+b+c+d+e+f))
   {
       sum=0;

       sum+=f;
       sum+=e;
       a=a-e*11;
       sum+=d;
       if(d*5>=b)
       {
           a=a-(d*5-b)*4;
           b=0;
       }
       else b=b-d*5;
       if(c%4==0)
       {
           sum+=c/4;
           if(b%9==0)
           {
               sum+=b/9;
               if(a>0)
               sum+=(a+35)/36;

           }
           if(b%9!=0)
           {
               sum+=b/9+1;
               k=9-b%9;
               a=a-k*4;
               if(a>0)
               sum+=(a+35)/36;
           }
       }

       else if(c%4!=0)
       {
           z=b;
           sum+=c/4+1;
           k=4-c%4;
            if(k==3)
            b=b-5;
            if(k==2)
            b=b-3;
            if(k==1)
            b=b-1;
           if(b<=0)
           {
               a=a-(k*9-4*z);
               if(a>=0)
               sum+=(a+35)/36;
           }
           else
           {
               if(k==3)
               a=a-7;
               if(k==2)
               a=a-6;
               if(k==3)
               a=a-5;
               sum+=(b+8)/9;
               if(b%9==0)
               {
                   if(a>0)
                   sum+=(a+35)/36;
               }
               else
               {
                   k=9-b%9;
                   a=a-k*4;
                   if(a>0)
                   sum+=(a+35)/36;
               }
            }
       }
       cout<<sum<<endl;
   }

    return 0;
}
原文地址:https://www.cnblogs.com/Sikaozhe/p/5314184.html