1691: 【基础】装箱问题

内存限制:512 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:12 解决:2

题目描述

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

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

输入

1个整数,表示箱子容量

1个整数,表示有nnn个物品

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

输出

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

样例输入 复制

24
6
8
3
12
7
9
7

样例输出 复制

0

提示

#include<bits/stdc++.h>
using namespace std;
int dp[31][200010],v[31]; 
int main(){
	int m,n,i,j;
	cin>>m>>n;
	for(i=1;i<=n;i++){
		cin>>v[i];	
	}
	for(i=1;i<=n;i++){
		for(j=m;j>=1;j--){
			if(j>=v[i]){
				dp[i][j] = max(dp[i-1][j],dp[i-1][j-v[i]]+v[i]);
			}else{
				dp[i][j] = dp[i-1][j];
			}
		}
		
	}
	cout<<m-dp[n][m];
	return 0;
}