您的位置:首页 > 编程语言 > C语言/C++

装箱问题<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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: