zoukankan      html  css  js  c++  java
  • FZU 2086 餐厅点餐(枚举)

    题意:有a种汤,b种饭,c种面条,d种荤菜,e种素菜。

    Jack每顿饭都会点1~2样荤菜d,1~2样素菜e(不重复)。

    同时,在Jack心情好的时候,会点一样饭b,再配上一种汤a。

    在心情不好的时候,就只吃一种面条c。

    总价在min~max之间。

    Jack想知道,总共有多少种不同的点餐方案。


    思路:暴力枚举


    代码:

    #include<iostream>
    #include<stdio.h>
    using namespace std;
    
    
    int main(){
    	int t;
    	int a,b,c,d,e;
    	int pa[15],pb[15],pc[15],pd[15],pe[15];
    	int min,max;
    	scanf("%d",&t);
    
    	while(t--){
    		scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
    		int i;
    		for(i=0;i<a;i++)	scanf("%d",&pa[i]);
    		for(i=0;i<b;i++)	scanf("%d",&pb[i]);
    		for(i=0;i<c;i++)	scanf("%d",&pc[i]);
    		for(i=0;i<d;i++)	scanf("%d",&pd[i]);
    		for(i=0;i<e;i++)	scanf("%d",&pe[i]);
    		scanf("%d%d",&min,&max);
    
    		int ai,bi,ci,di,ei;
    		int di2,ei2;
    		int sum;
    		int ans=0;
    		for(di=0;di<d;di++){
    			for(ei=0;ei<e;ei++){
    				for(bi=0;bi<b;bi++){
    					for(ai=0;ai<a;ai++){
    						sum=pd[di]+pe[ei]+pb[bi]+pa[ai];
    						if(sum>=min&&sum<=max) ans++;
    					}
    				}
    				for(ci=0;ci<c;ci++){
    					sum=pd[di]+pe[ei]+pc[ci];
    					if(sum>=min&&sum<=max) ans++;
    				}
    			}
    		}
    		for(di=0;di<d;di++){
    			for(ei=0;ei<e;ei++){
    				for(ei2=ei;ei2<e;ei2++){//枚举时注意从ei开始就行,不要从0开始,否则会重复
    					if(ei!=ei2){
    						for(bi=0;bi<b;bi++){
    							for(ai=0;ai<a;ai++){
    								sum=pd[di]+pe[ei]+pb[bi]+pa[ai]+pe[ei2];
    								if(sum>=min&&sum<=max) ans++;
    							}
    						}
    						for(ci=0;ci<c;ci++){
    							sum=pd[di]+pe[ei]+pc[ci]+pe[ei2];
    							if(sum>=min&&sum<=max) ans++;
    						}
    					}
    				}
    			}
    		}
    		for(di=0;di<d;di++){
    			for(di2=di;di2<d;di2++){
    				if(di!=di2){
    					for(ei=0;ei<e;ei++){
    						for(bi=0;bi<b;bi++){
    							for(ai=0;ai<a;ai++){
    								sum=pd[di]+pe[ei]+pb[bi]+pa[ai]+pd[di2];
    								if(sum>=min&&sum<=max) ans++;
    							}
    						}
    						for(ci=0;ci<c;ci++){
    							sum=pd[di]+pe[ei]+pc[ci]+pd[di2];
    							if(sum>=min&&sum<=max) ans++;
    						}
    					}
    				}
    			}
    		}
    		for(di=0;di<d;di++){
    			for(di2=di;di2<d;di2++){
    				if(di!=di2){
    					for(ei=0;ei<e;ei++){
    						for(ei2=ei;ei2<e;ei2++){
    							if(ei!=ei2){
    								for(bi=0;bi<b;bi++){
    									for(ai=0;ai<a;ai++){
    										sum=pd[di]+pe[ei]+pb[bi]+pa[ai]+pd[di2]+pe[ei2];
    										if(sum>=min&&sum<=max) ans++;
    									}
    								}
    								for(ci=0;ci<c;ci++){
    									sum=pd[di]+pe[ei]+pc[ci]+pd[di2]+pe[ei2];
    									if(sum>=min&&sum<=max) ans++;
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
    


    代码2:某超,超哥好猛,代码就是短奋斗

    #include <iostream>
    using namespace std;
    int main()
    {
        int T;
        cin>>T;
        while(T--)
        {
            int a,b,c,d,e,mins,maxs;
            int x1[10],x2[10],x3[10],x4[10],x5[10];
            int i,j,count1=0;
            int s1,s2,s3,s4,s5,sum1,sum2,sum3,sum4;
            cin>>a>>b>>c>>d>>e;
            for(i=0;i<a;i++)
                cin>>x1[i];
            for(i=0;i<b;i++)
                cin>>x2[i];
            for(i=0;i<c;i++)
                cin>>x3[i];
            for(i=0;i<d;i++)
                cin>>x4[i];
            for(i=0;i<e;i++)
                cin>>x5[i];
            cin>>mins>>maxs;
            for(s4=0;s4<d;s4++)
            {
                for(i=s4;i<d;i++)
                {
                    if(i==s4) sum1=x4[s4];
                    else sum1=x4[s4]+x4[i];
                    for(s5=0;s5<e;s5++)
                    {
                       for(j=s5;j<e;j++)
                       {
                           if(j==s5) sum2=x5[s5];
                           else sum2=x5[s5]+x5[j];
                           for(s2=0;s2<b;s2++)
                              for(s1=0;s1<a;s1++)
                              {
                                sum3=x2[s2]+x1[s1];
                                int sum=sum1+sum2+sum3;
                                if(sum>=mins&&sum<=maxs)
                                  count1++;
                              }
                           for(s3=0;s3<c;s3++)
                            {
                               sum4=x3[s3];
                               int sum=sum1+sum2+sum4;
                               if(sum>=mins&&sum<=maxs)
                                  count1++;
                            }
                        }
                     }
                 }
             }
            cout<<count1<<endl;
          }
          return 0;
    }
    


  • 相关阅读:
    《深入浅出MFC》第八章 Document-View深入探讨
    《深入浅出MFC》第九章 消息映射与命令传递
    C++ Primer 第十五章 面向对象程序设计
    《深入浅出MFC》第十四章 多线程程序设计
    《C++ Primer》第十八章 用于大型程序的工具
    liunx 配置ftp
    Linux中apche配置
    liunx 安装mysql
    liunx 安装jdk
    mysql
  • 原文地址:https://www.cnblogs.com/gongpixin/p/4477383.html
Copyright © 2011-2022 走看看