居然没有秒切的01背包,我还是太弱了的洛谷P1049 装箱问题

https://www.luogu.org/problem/P1049
题目描述
有一个箱子容量为V(正整数,0 \le V \le 200000≤V≤20000),同时有n个物品(0

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

输入格式
1个整数,表示箱子容量

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

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

输出格式
1个整数,表示箱子剩余空间。

输入输出样例
输入 #1 复制
24
6
8
3
12
7
9
7
输出 #1 复制
0
说明/提示
NOIp2001普及组 第4题
居然没有秒切的01背包,我还是太弱了的洛谷P1049 装箱问题_第1张图片

idea

in my first eyes , I didn’t find it just a 01 bag problem . maybe a One dimension(维度) dp
after I saw the problem solution , it told me just a 01 bag problem , and the key of this problem is you should look the Volume as the Value .

after that , we can get the answer .

AC Code

#include
#include
#include
#include
#include
#include
#include
using namespace std;
int a[20005],dp[20005];
int main(){
	int n,num;
	cin >> num >> n;
	for(int i = 1;i <= n;i++){
			cin >> a[i];
		}

	for(int i = 1;i <= n;i++)
	for(int j = num;j > 0;j--){
		if(j>=a[i])
		dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
		}
		cout << num-dp[num] << endl;

}

你可能感兴趣的:(题解,洛谷,动态规划,背包,思维,题解,DP)