[NOIP2001 普及组] 装箱问题

题目描述

有一个箱子容量为 装箱问题_最小值,同时有 装箱问题_最小值_02 个物品,每个物品有一个体积。

现在从 装箱问题_最小值_02 个物品中,任取若干个装入箱内(也可以不取),使箱子的剩余空间最小。输出这个最小值。

输入格式

第一行共一个整数 装箱问题_最小值,表示箱子容量。

第二行共一个整数 装箱问题_最小值_02,表示物品总数。

接下来 装箱问题_最小值_02 行,每行有一个正整数,表示第 装箱问题_c++_07 个物品的体积。

输出格式

  • 共一行一个整数,表示箱子最小剩余空间。

样例 #1

样例输入 #1

24
6
8
3
12
7
9
7

样例输出 #1

0

提示

对于 装箱问题_ci_08 数据,满足 装箱问题_最小值_09装箱问题_c++_10

【题目来源】

NOIP 2001 普及组第四题


#include<bits/stdc++.h>
using namespace std;
int v,m;
int cost[1005];
int dp[200001];
int main() {
	cin>>v>>m;
	for(int j=1; j<=m; j++) cin>>cost[j];
	dp[0]=1;
	for(int i=1; i<=m; i++) 
		for(int j=v; j>=cost[i]; j--) 
			dp[j]+=dp[j-cost[i]];
	for(int j=v;j>=0;j--){
		if(dp[j]!=0){
			printf("%d",v-j);
			return 0;
		}
	}
}