|
发表于 2022-4-22 15:42:07
|
显示全部楼层
本帖最后由 jhq999 于 2022-4-22 16:04 编辑
用了最笨的方法拆解
- #include<stdio.h>
- void su(int **cai,int *caicount,int sum,int min,int max,int *count)
- {
- int s[2]={sum,sum};
- for (int i = 0; i < caicount[4]; i++)
- {
- sum=s[0];
- sum+=cai[4][i];
- if (sum>max)continue;
- if(sum>=min)
- {
- (*count)++;
- }
- s[1]=sum;
- for (int j = 0; j < caicount[4]; j++)
- {
- if (i!=j)
- {
- sum=s[1];
- sum+=cai[4][j];
- if (sum>max)continue;
- if(sum>=min)
- {
- (*count)++;
- }
- }
- }
- }
- }
- void hun(int **cai,int *caicount,int sum,int min,int max,int *count)
- {
- int h[2]={sum,sum};
- for (int i = 0; i < caicount[3]; i++)
- {
- sum=h[0];
- sum+=cai[3][i];
- if (sum>max)continue;
- h[1]=sum;
- su(cai,caicount,sum,min,max,count);
- for (int j = 0; j < caicount[3]; j++)
- {
- if (i!=j)
- {
- sum=h[1];
- sum+=cai[3][j];
- if (sum>max)continue;
- su(cai,caicount,sum,min,max,count);
- }
- }
- }
- }
- void tangandmifan(int **cai,int *caicount,int sum,int min,int max,int *count)
- {
- for (int i= 0; i < caicount[0]; i++)
- {
- for (int j = 0;j < caicount[1];j++)
- {
- sum=0;
- sum+=cai[0][i]+cai[1][j];
- if (sum>max)continue;
- hun(cai,caicount,sum,min,max,count);
- }
- }
- }
- int main()
- {
- int i,t,a,b,c,d,e,j,min,max,m,n,p,q,g,q1,g1;
- scanf("%d",&t);
- int num=0,sum=0,count=0;
- scanf("%d %d %d %d %d",&a,&b,&c,&d,&e);
- int *A=new int[a],*B=new int[b],*C=new int[c],*D=new int[d],*E=new int[e],*cai[5]={A,B,C,D,E},caicount[5]={a,b,c,d,e};
- for(j=0;j<a;j++)
- scanf("%d",&A[j]);
- for(j=0;j<b;j++)
- scanf("%d",&B[j]);
- for(j=0;j<c;j++)
- scanf("%d",&C[j]);
- for(j=0;j<d;j++)
- scanf("%d",&D[j]);
- for(j=0;j<e;j++)
- scanf("%d",&E[j]);
- scanf("%d %d",&min,&max);
- tangandmifan(cai,caicount,sum,min,max,&count);
- for (i = 0; i < caicount[2]; i++)
- {
- sum=cai[2][i];
- if (sum>max)continue;
- hun(cai,caicount,sum,min,max,&count);
- }
- printf("%d",count);
- for (i = 0; i < 5; i++)
- {
- delete[] cai[i];
- }
- return 0;
- }
复制代码 |
|