题目
把刻度点*重量作为一个物品
分组背包求方案数:因为有负数,我用了map代替数组,不知道为什么代码输出不对。
//01背包求恰好装满的方案数
#include<bits/stdc++.h>
using namespace std;
int n,m;
int w[110][110],a[110],b[110];
map<int,int> f;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(int i=1;i<=m;i++)
{
scanf("%d",&b[i]);
}
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)//每组内物品
{
w[i][j]=a[j]*b[i];
}
}
f[0]=1;
for(int i=1;i<=m;i++)//一共m组
{
for(int j=1000;j>=-1000;j--)
{
for(int k=1;k<=n;k++)//每组里n个
{
f[j]+=f[j-w[i][k]];
}
}
}
cout<<f[0];
return 0;
}