首页 > 其他 > 详细

洛谷P1049 装箱问题

时间:2019-08-14 11:19:36      阅读:93      评论:0      收藏:0      [点我收藏+]

题目:https://www.luogu.org/problem/P1049(偷个懒,不把题目粘上去了好)

分析

这道题看似是一个背包,其实没必要那么麻烦。我们定义一个f数组,枚举这些物品可以组合出的所有体积。最后从体积为m往前遍历,输出第一个能组合出来的体积与总容量的差。代码如下。

 

#include <bits/stdc++.h>
using namespace std;
int n,m,a[105];
bool f[20005]; //f记录每个体积 
int main()
{
	cin>>m>>n;
	for(int i=0;i<n;i++) cin>>a[i];
	for(int i=0;i<n;i++)
	{
		int tmp[10005];
		for(int l=0;l<=m;l++) tmp[l]=f[l]; //我们不能直接用f更新f,因为会出现一个物品使用两次的情况 
		f[a[i]]=1;
		for(int j=1;j<=m;j++)
		{
			if(tmp[j]!=0 && j+a[i]<=m) f[j+a[i]]=1; //更新 
		}
	}
	for(int i=m;i>=0;i--)
	{
		if(f[i])
		{
			cout<<m-i; //输出第一个能组合出来的体积与总容量的差
			break;
		}
	}
	return 0;
}

 

  

 

洛谷P1049 装箱问题

原文:https://www.cnblogs.com/zxjhaha/p/11344726.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!