当时看到挂东西,数据范围那么小,就想成搜索了,但是时间复杂度太高,那么就可能是dp了,但是状压dp又迟迟找不到状态,所以就想到是01背包,只要考虑到没挂一个对于平衡有什么影响就可以了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
using namespace std;
int f[21][15010];
int n,g,loc[21],w[21];
int main()
{
int i,j,k;
scanf("%d%d",&n,&g);
for (i=1;i<=n;i++)
cin>>loc[i];
for (i=1;i<=g;i++)
cin>>w[i];
memset(f,0,sizeof(f));
f[0][7500]=1;
for (i=1;i<=g;i++)
for (j=0;j<=15000;j++)
if (f[i-1][j])
for (k=1;k<=n;k++)
f[i][j+w[i]*loc[k]]+=f[i-1][j];
printf("%d\n",f[g][7500]);
return 0;
}