<center>       
(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 
 
 
                        问题 : 空运物资
</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 ,数量分别为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;
}
 
京公网安备 11010502036488号