提问,关于此题背包判断部分
查看原帖
提问,关于此题背包判断部分
54372
A_Đark_Horcrux楼主2020/11/26 16:49

原版01背包:

for(i=1;i<=m;i++)
		for(j=t;j>=c[i];j--)
			f[j]=max(f[j],f[j-c[i]]+v[i]);//c:体积 v:价值

我按照题解所说,令c[i]=b[i],v[i]=a[i]-b[i]*mid,然后跑原版背包,wa..

题解中的写法:

for(i=1;i<=w;i++) f[i]=-1e9+7;
	for(int i=1;i<=n;i++)
		for(int j=w;j>=0;j--)
			if(f[j]!=-1e9+7)
			{
				int k=min(j+b[i],w);
				f[k]=max(f[k],f[j]+a[i]-(long long)b[i]*z);
			}
	return f[w]>=0;

???

2020/11/26 16:49
加载中...