题意;
给你n种物品,每种物品有(2^c[i])-1件,重量为v[i]
然后k个询问,问你从中任意取物品,使得总重量为S的方案数有多少
解析:
多重背包裸题......之前看的忘了,哎......
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 1e4+10;
const int MOD = 1e9+7;
int a[500],dp[MAXN];
int main()
{
int t;
int n,q;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&q);
int x,y;
int cnt=0;
for(int i=1;i<=10000;i++) dp[i]=0;
for(int i=0;i<n;i++)
{
scanf("%d%d",&x,&y);
for(int j=0;j<y;j++)
{
a[cnt++]=x*(1<<j);
}
}
dp[0]=1;
for(int i=0;i<cnt;i++)
{
for(int j=10000;j>=a[i];j--)
{
dp[j]=(dp[j]+dp[j-a[i]])%MOD;
}
}
int z;
for(int i=0;i<q;i++)
{
scanf("%d",&z);
printf("%d\n",dp[z]);
}
}
}