【天梯】背包型动态规划-1014 装箱问题

题目描述  Description

有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。

要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。

输入描述  Input Description

一个整数v,表示箱子容量

一个整数n,表示有n个物品

接下来n个整数,分别表示这n 个物品的各自体积

输出描述  Output Description

一个整数,表示箱子剩余空间。

样例输入  Sample Input

24

6

8

3

12

7

9

7

样例输出  Sample Output

0

最重要的还是动态转移方程的设置,大多数背包问题的前提思想就是求什么的最优,是否放入。
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int v,n,w[31]={0};
	int f[20001]={0};
	scanf("%d",&v);
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		scanf("%d",&w[i]);
		for(int j=v;j>=w[i];j--)
		{
	    	f[j]=max(f[j-w[i]]+w[i],f[j]);
		}
	}
	cout<<v-f[v];
	return 0;
}
 


猜你喜欢

转载自blog.csdn.net/qq_36718092/article/details/80554397
今日推荐