其他分享
首页 > 其他分享> > 洛谷P1049 装箱问题(01背包变形)

洛谷P1049 装箱问题(01背包变形)

作者:互联网

题意:给你一个箱子体积为V,有n个物品,每个物品有一个体积v[i],要在求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。

每个物品同样只能取一次,01背包问题变形。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn=2e4+5;
bool dp[maxn];		//dp[i,j]表示来到前i件物品中,能否凑成体积j。
int v[35];

int main()
{
	int V,n;
	cin>>V>>n;
	for(int i=1;i<=n;i++)	cin>>v[i];
	dp[0]=1;
	for(int i=1;i<=n;i++)
		for(int j=V;j>=v[i];j--)
			dp[j]|=dp[j-v[i]];
	int ans;
	for(int i=V;i>=0;i--)
		if(dp[i])
		{
			ans=i;
			break;
		}
	cout<<V-ans<<endl;
	return 0;
}

标签:01,洛谷,int,include,ans,物品,P1049,dp
来源: https://blog.csdn.net/shamansi99/article/details/99609163