这是我错的很显然的多重背包,有dalao知道应该咋改吗orz
(菜到连多重背包求方案数都不会qwq)
#include<bits/stdc++.h>
using namespace std;
typedef long long lol;
int c[5],n;
int d[5],m;
int f[1000005];
int main(){
for(int i=1;i<=4;i++)
scanf("%d",&c[i]);
cin>>n;
while(n--){
for(int i=1;i<=4;i++)
scanf("%d",&d[i]);
cin>>m;
memset(f,0,sizeof f);
f[0]=1;
for(int i=1;i<=4;i++){
int tmp=d[i];
for(int k=1;tmp;k<<=1){
int x=min(k,tmp);tmp-=x;
for(int j=m;j>=x*c[i];j--){
f[j]+=f[j-x*c[i]];
}
}
}
cout<<f[m]<<endl;
}
}