暴力枚举一下就可以得到答案。
#include<cstdio> #include<cstring> #include<cmath> #include<string> #include<algorithm> #include<iostream> using namespace std; const int maxn=100+10; struct X { int cost; }hun[maxn],su[maxn],fan[maxn],tang[maxn],mian[maxn]; int a,b,c,d,e; int aa,bb,cc,dd,ee; int MIN,MAX; int A[maxn],B[maxn],C[maxn],D[maxn],E[maxn]; int main() { int T; scanf("%d",&T); while(T--){ scanf("%d%d%d%d%d",&a,&b,&c,&d,&e); for(int i=0;i<a;i++) scanf("%d",&A[i]); for(int i=0;i<b;i++) scanf("%d",&B[i]); for(int i=0;i<c;i++) scanf("%d",&C[i]); for(int i=0;i<d;i++) scanf("%d",&D[i]); for(int i=0;i<e;i++) scanf("%d",&E[i]); scanf("%d%d",&MIN,&MAX); aa=bb=cc=dd=ee=0; for(int i=0;i<a;i++) tang[aa++].cost=A[i]; for(int i=0;i<b;i++) fan[bb++].cost=B[i]; for(int i=0;i<c;i++) mian[cc++].cost=C[i]; for(int i=0;i<d;i++) { hun[dd++].cost=D[i]; for(int j=i+1;j<d;j++) { hun[dd++].cost=D[i]+D[j]; } } for(int i=0;i<e;i++) { su[ee++].cost=E[i]; for(int j=i+1;j<e;j++) { su[ee++].cost=E[i]+E[j]; } } int ans=0; for(int i=0;i<dd;i++) { for(int j=0;j<ee;j++) { //心情好 for(int k=0;k<bb;k++) { for(int s=0;s<aa;s++) { if(hun[i].cost+su[j].cost+fan[k].cost+tang[s].cost>=MIN &&hun[i].cost+su[j].cost+fan[k].cost+tang[s].cost<=MAX)ans++; } } //心情差 for(int k=0;k<cc;k++) { if(hun[i].cost+su[j].cost+mian[k].cost>=MIN &&hun[i].cost+su[j].cost+mian[k].cost<=MAX)ans++; } } } printf("%d ",ans); } return 0; }