01背包方案数
在f[j]表示容量为j时可获得的最大价值的情况下,增加数组c[i]表示容量为i时最优选法的方案数
void fun()
{
cin>>n>>m;
for(int i=1;i>v[i]>>w[i];
for(int i=1;i=v[i];j--)
{
if(f[j-v[i]]+w[i]>f[j])
{
f[j]=f[j-v[i]]+w[i];
c[j]=c[j-v[i]];
}
else if(f[j-v[i]]+w[i]==f[j])
c[j]=(c[j]+c[j-v[i]])%mod;
}
}
coutv[i]>>w[i];
for(int n;i>=1;i--)
{
for(int j=0;j=v[i])
f[i][j]=max(f[i][j],f[i+1][j-v[i]]+w[i]);
}
}
int j=m;
for(int i=1;i=v[i]&&f[i][j]==f[i][j-v[i]]+w[i])
{
cout>n;
for(int i=1;i>a[i]>>b[i]>>c[i];
for(int i=n;i>=1;i--)
{
for(int j=0;j=b[i])
f[i][j][k]=max(f[i][j][k],f[i+1][j-a[i]][k-b[i]]+c[i]);
}
}
}
cout>v;
add(u,v),add(v,u);
}
dfs(1,0);
int ans=-inf;
for(int i=1;is1>>m>>s2;
for(int i=1;i
关注
打赏