装箱问题<DP><C++>
2015-10-31 16:15
162 查看
题目
题目:给出n个物品的体积,选取其中若干个物品装入容量为v的箱子中,剩余空间最小为多少?输出这个最小值.输入格式:
第一行,输入箱子的容量v.
第二行,输入物品的个数n.
接下来n行,输入每个物品的体积.
输出格式:仅一行,输出箱子最小剩余空间.
例子:
input:
24
6
8
3
12
7
9
7
output:
0
分析
用f[v]来表示前
i个物品放入容量为
v的箱子中的最大体积,
d[i]表示第
i个物品的体积,则状态转移方程为
f[v]=max(f[v],f[v-d[i]]+d[i]),我们要的结果就在
f[v]中.
程序
[code]#include<cstdio> #include<cstring> #include<iostream> using namespace std; int main(){ int v,n; scanf("%d%d",&v,&n); int d[n+1],f[v+1]; memset(f,0,sizeof(f)); for(int i=1;i<=n;i++) scanf("%d",&d[i]); for(int i=1;i<=n;i++) for(int j=v;j>=1;j--) if(j>=d[i]) f[j]=max(f[j],f[j-d[i]]+d[i]); printf("%d",v-f[v]); return 0; }
相关文章推荐
- C语言_根据用户输入确定新建的数组大小
- C++学习笔记19——顺序容器的介绍
- 为什么构造函数不能为虚函数(转)
- C++实现的屏幕截图(PNG或BMP)
- 数值分析计算实习及遇到的问题分析
- effective c++:必须返回对象时,别妄想返回其reference
- 值得推荐的C/C++框架和库
- c语言,将字符串逆置,如"i am a student"逆置为"student a am i"
- C++的作用域与链接
- [C++] right value reference
- c++11 数值类型和字符串的相互转换
- 乘积最大<DP><C++>
- c++11 处理时间和日期
- matiab调用C语言程序
- 将数组"student a am i"的内容改为"i am a student"
- 安装 gcc-c++ 时报错和原有 gcc 版本冲突
- 做一个动态链接库
- 使用sLDA
- C语言入门----输出语句
- HDU1004(C++map的用法)