<center>

问题 : 空运物资

</center>

题目描述

在灾区,多数人已经受伤,缺水,少食物,精神处在崩溃的边缘。很多人的生存条件仅能维持几天。灾民需要帐篷、衣物、食品和医疗器材、药品等物资。14日上午,中央军委委员、空军司令员***组织召开空军首长办公会,将空军下一步救灾重点确定为抢救伤员、空投、空运。空军各部队都派出多架运输机,准备向灾区空运急需物品。
现在已知四种打包过的急需物品重量分别为C1, C2, C3,C4 ,数量分别为M1,M2,M3,M4包。一架运输机的载重量为W, 现在各部队关心将一架运输机装满共有多少种运载方案,以便调度进行空运。
比如C={ 100, 200, 500, 1000}, M={ 3, 2, 3, 1 }, W=1000, 一共有4种运载方案:
1000=100+100+100+200+500
1000=100+200+200+500
1000=500+500
1000=1000

输入

第一行: C1 C2 C3 C4 N    其中N为空运的部队数
接下来n行: Mi1 Mi2 Mi3 Mi4 Wi    表示各运载部队需空运的4种物品数量Mi和各自运输机的载重量Wi i=1,2,….. , N

输出

输出有N行,表示各部队运载物品的方案总数,保证答案在10000范围内

【约束条件】
(1)0< Cj <= 1000 0 <= Mij <= 500 i =1,2,….. , N j =1,2,3,4
(2)N<=1000 0 < Wi <= 100000 i =1,2,….. , N
(3)时间限制: 1000MS

 

样例输入

1 2 5 10 2
3 2 3 1 10
1000 2 2 2 900

样例输出

4
27

题意描述

    用飞机空运物资的运载方案。

题意分析

    我当时想的就是暴力求解,有四种急需物品就用四重循环来实现,但是我没有考虑时间的问题所以交上去导致时间超限。后来又修改的,当第i种物品有n个就已经超载就不用再判断后面的,直接

break跳出。

具体代码

#include<stdio.h>
int main()
{
    int c1,c2,c3,c4,n,m1,m2,m3,m4,wi;
    int i,j,k,w,count;
    while(scanf("%d%d%d%d%d",&c1,&c2,&c3,&c4,&n)!=EOF)
    {
            while(n--)
        {
            count=0;
            scanf("%d%d%d%d%d",&m1,&m2,&m3,&m4,&wi);
            for(i=0;i<=m1;i++)
            {
                if(c1*i>wi)
                    break;
                {
                    for(j=0;j<=m2;j++)
                    {
                        if(c1*i+c2*j>wi)
                            break;
                        for(k=0;k<=m3;k++)
                        {
                            if(c1*i+c2*j+c3*k>wi)
                                break;
                            for(w=0;w<=m4;w++)
                            {
                                if(c1*i+c2*j+c3*k+c4*w>wi)
                                    break;
                                if(c1*i+c2*j+c3*k+c4*w==wi)
                                {
                                    count++;
                                    break;
                                }
                            }
                        }
                                
                    }
                            
                }
            }
                
        printf("%d\n",count);
    }
    }
    
    return 0;
}