zoukankan      html  css  js  c++  java
  • UVA 311 Packets

    UVA_311

    这个题目可以直接模拟装箱的过程,并且要先装大的。

    ①每个6*6的都占一个箱子。

    ②每个5*5的放在一个箱子里,同时里面还能装111*1的。

    ③每个4*4的放在一个箱子里,同时里面还能装52*2的,如果2*2的不够了,那么还能放1*1的。

    ④每43*3的放在一个箱子里,如果还剩余3*3的,则要看剩余的数目分别进行讨论。

    ⑤最后如果还剩下了2*21*1的,再装这些。

        同时,在装2*21*1都可以的情况下,我们优先装2*2。这里还有一个小技巧,就是我们可以假设2*2是充足的,万一到最后2*2成了负数,我们用1*1去补就可以了,这样就不用考虑2*2是否不够的问题了。所以比如在装4*4的时候,我们完全可以假设都能装下52*2的,最后再根据2*2的正负再确定最后还剩余多少2*21*1的,同样的,装5*5的时候也可以假设每个都能装下111*1的,装3*3的时候也是类似的。

    #include<stdio.h>
    #include<string.h>
    int a[10];
    int main()
    {
    int i,j,k,n;
    while(1)
    {
    for(i=1;i<=6;i++)
    scanf("%d",&a[i]);
    if(!a[1]&&!a[2]&&!a[3]&&!a[4]&&!a[5]&&!a[6])
    break;
    n=0;
    n+=a[6];
    n+=a[5];
    a[1]-=11*a[5];
    n+=a[4];
    a[2]-=5*a[4];
    n+=a[3]/4;
    if(a[3]%4==1)
    {
    a[2]-=5;
    a[1]-=7;
    n++;
    }
    else if(a[3]%4==2)
    {
    a[2]-=3;
    a[1]-=6;
    n++;
    }
    else if(a[3]%4==3)
    {
    a[2]-=1;
    a[1]-=5;
    n++;
    }
    if(a[2]<0)
    {
    a[1]+=4*a[2];
    a[2]=0;
    }
    if(a[1]<0)
    a[1]=0;
    n+=(a[1]+4*a[2])/36;
    if((a[1]+4*a[2])%36!=0)
    n++;
    printf("%d\n",n);
    }
    return 0;
    }


  • 相关阅读:
    java中过滤器和拦截器的区别
    Java中内部类和静态内部类的区别
    SpringBoot启动的时候切换配置文件命令
    centos7安装Subversion
    关于curl_setopt参数的记录
    Linux Samba文件共享服务,安装与案例配置
    CentOS7源码安装Redis5.0.4非关系型数据库
    Centos7部署LAMP平台之架构之路
    Centos7安装及配置DHCP服务
    CentOS 7源码安装MYSQL-5.6
  • 原文地址:https://www.cnblogs.com/staginner/p/2186187.html
Copyright © 2011-2022 走看看