标签:
这个题主要分成四种情况讨论:
一荤一素,两荤两素,一素两荤,一荤两素。
因为不管是饭和汤,还是面条,都会对应上面四种情况,所以我把饭和汤,面条写的一个函数里。
详细见代码,请各位大神指教。----wzm
1 #include <iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 using namespace std; 6 int a[15],b[15],c[15],d[15],e[15]; 7 int a1,b1,c1,d1,e1; 8 int sum[5],ans,minn,maxn; 9 void f(int s){//一饭一汤,面条 10 for(int x = 1; x<=a1; x++){ 11 for(int y = 1; y<=b1; y++){ 12 if((s+a[x]+b[y])>=minn&&(s+a[x]+b[y])<=maxn){ 13 ans++; 14 } 15 } 16 } 17 for(int z = 1; z<=c1; z++){ 18 if((s+c[z])>=minn&&(s+c[z])<=maxn){ 19 ans++; 20 } 21 } 22 } 23 void solve(){ 24 int t; 25 scanf("%d",&t); 26 while(t--){ 27 cin>>a1>>b1>>c1>>d1>>e1; 28 for(int i = 1; i<=a1; i++) cin>>a[i]; 29 for(int i = 1; i<=b1; i++) cin>>b[i]; 30 for(int i = 1; i<=c1; i++) cin>>c[i]; 31 for(int i = 1; i<=d1; i++) cin>>d[i]; 32 for(int i = 1; i<=e1; i++) cin>>e[i]; 33 cin>>minn>>maxn; 34 ans = 0; 35 for(int i = 1; i<=d1; i++){//一荤一素 36 for(int j = 1; j<=e1; j++){ 37 { 38 int s = d[i]+e[j]; 39 f(s); 40 } 41 } 42 } 43 for(int i = 1; i<=d1; i++)//两荤两素 44 for(int j = i+1; j<=d1; j++){ 45 for(int p = 1; p<=e1; p++){ 46 for(int q = p+1; q<=e1; q++){ 47 int s = d[i]+d[j]+e[p]+e[q]; 48 f(s); 49 } 50 } 51 } 52 for(int i = 1; i<=d1; i++){//一荤两素 53 for(int p = 1; p<=e1; p++) 54 for(int q = p+1; q<=e1; q++){ 55 int s = d[i]+e[p]+e[q]; 56 f(s); 57 } 58 } 59 for(int p = 1; p<=e1; p++){//两荤一素 60 for(int i = 1;i<=d1; i++){ 61 for(int j = i+1; j<=d1; j++){ 62 int s = d[i]+d[j]+e[p]; 63 f(s); 64 } 65 } 66 } 67 printf("%d\n",ans); 68 } 69 } 70 int main() 71 { 72 solve(); 73 return 0; 74 }
~end~
标签:
原文地址:http://www.cnblogs.com/chdacm/p/5395063.html