洛谷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