博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Code Vs 1014 装箱
阅读量:4027 次
发布时间:2019-05-24

本文共 767 字,大约阅读时间需要 2 分钟。

有一个箱子容量为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

大体思路:

基本的背包问题,dp[j]表示在空间为j的情况下所能取得的最大值。

状态转移方程:dp[j]=max(dp[j],dp[j-a[i]]+a[i])
前提是j>=a[i]

代码:

#include
#include
#include
using namespace std;int a[31];int dp[20005];int main(){ int v,n; while(cin>>v>>n) { for(int i=1;i<=n;++i){ cin>>a[i]; // dp[i]=v; } dp[0]=0; for(int i=1;i<=n;++i){ for(int j=v;j>=a[i];--j){ dp[j]=max(dp[j],dp[j-a[i]]+a[i]); } } cout<
<

转载地址:http://abobi.baihongyu.com/

你可能感兴趣的文章
Android DataBinding使用2-Recycleview
查看>>
drat中构造方法
查看>>
JavaScript的一些基础-数据类型
查看>>
JavaScript基础知识(2)
查看>>
转载一个webview开车指南以及实际项目中的使用
查看>>
关于activity保存页面状态的两个方法
查看>>
android中对于非属性动画的整理
查看>>
一个简单的TabLayout的使用
查看>>
关于let{a}=B出现的解构赋值
查看>>
ReactNative使用Redux例子
查看>>
Promise的基本使用
查看>>
android给文字加边框(修改不能居中的问题)
查看>>
coursesa课程 Python 3 programming course_2_assessment_1
查看>>
coursesa课程 Python 3 programming 统计文件有多少单词
查看>>
coursesa课程 Python 3 programming 输出每一行句子的第三个单词
查看>>
coursesa课程 Python 3 programming Dictionary methods 字典的方法
查看>>
Returning a value from a function
查看>>
coursesa课程 Python 3 programming Functions can call other functions 函数调用另一个函数
查看>>
coursesa课程 Python 3 programming Tuple Assignment with Unpacking
查看>>
coursesa课程 Python 3 programming The while Statement
查看>>