当前位置: 首页> 娱乐> 明星 > 线上推广费用_广州疫情防控举措_河南网站开发公司_脚本外链平台

线上推广费用_广州疫情防控举措_河南网站开发公司_脚本外链平台

时间:2025/9/28 1:26:08来源:https://blog.csdn.net/ygklwyf/article/details/144678042 浏览次数:0次
线上推广费用_广州疫情防控举措_河南网站开发公司_脚本外链平台
# [NOIP2001 普及组] 装箱问题
## 题目描述
有一个箱子容量为 $V$,同时有 $n$ 个物品,每个物品有一个体积。
现在从 $n$ 个物品中,任取若干个装入箱内(也可以不取),使箱子的剩余空间最小。输出这个最小值。
## 输入格式
第一行共一个整数 $V$,表示箱子容量。
第二行共一个整数 $n$,表示物品总数。
接下来 $n$ 行,每行有一个正整数,表示第 $i$ 个物品的体积。
## 输出格式
- 共一行一个整数,表示箱子最小剩余空间。
https://www.luogu.com.cn/problem/P1049

一个背包问题,用较为普遍的方法也就是dp二维数组(将体积看作价值)可以过但空间占用的较多。

#include<bits/stdc++.h>
using namespace std;
#define IO ios::sync_with_stdio(false);cin.tie(0)
const int N = 20000;
int c[N];
int dp[30][N];
int solve(int n, int C) {for (int i = 1; i <= n; i++) {for (int j = 1; j <= C; j++) {if (c[i] > j)dp[i][j] = dp[i - 1][j];elsedp[i][j] = max(dp[i - 1][j], dp[i - 1][j - c[i]] + c[i]);}}return (C - dp[n][C]);
}int main() {IO;int C, n;cin >> C >> n;for (int i = 1; i <= n; i++)cin >> c[i];memset(dp, 0, sizeof(dp));cout << solve(n, C) << endl;return 0;
}

 既然这道题不涉及价值那么我们可以用01背包问题的解法,这样只用定义一个一维数组,空间占用少。

#include<iostream>
using namespace std;
int v, n;
int a[40];
int dp[20100];int main() {cin >> v >> n;for (int i = 1; i <= n; i++) cin >> a[i];dp[0] = 1;for (int i = 1; i <= n; i++) {for (int j = v; j >= a[i]; j--) {dp[j] = dp[j] || dp[j - a[i]];}}for (int j = v; j >= 0; j--) {if (dp[j]) {cout << v - j;break;}}
}

 

关键字:线上推广费用_广州疫情防控举措_河南网站开发公司_脚本外链平台

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: