其他分享
首页 > 其他分享> > [luogu] P1776 宝物筛选 多重背包二进制优化

[luogu] P1776 宝物筛选 多重背包二进制优化

作者:互联网

前言

传送门 :

思路

多重背包二进制裸题

没记错这个使用了倍增的思想

将我们选的数 表示成二进制即可,大大的提高了时间效率

CODE

const int N  = 4e4+10;
ll f[N*20];

int n,m;

void solve()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		int v,w,s;cin>>w>>v>>s;
		
		for(int k=1;k<=s;k*=2)
		{
			for(int j =m;j>=k*v;j -- )
			f[j] = max(f[j],f[j-k*v]+k*w);
			s-=k;
		}
		
		if(s)
		{
			for(int j = m;j>=s*v;j--)
			{
				f[j] = max(f[j],f[j-s*v]+s*w);
			}
		}
	}
	cout<<f[m]<<endl;
	
}

标签:int,背包,二进制,luogu,cin,--,P1776,max
来源: https://blog.csdn.net/qq_34364611/article/details/121715986