装箱问题

来源:互联网 发布:深入理解java pdf下载 编辑:程序博客网 时间:2024/04/29 23:05

问题 A: 装箱问题

时间限制: 1 Sec  内存限制: 128 MB

题目描述

【问题描述】 
有一个箱子的容量为V(V为正整数,且满足0≤V≤20000),同时有n件物品(0的体积值为正整数。 
要求从n件物品中,选取若干装入箱内,使箱子的剩余空间最小。 
输入:1行整数,第1个数表示箱子的容量,第2个数表示有n件物品,后面n个数分别表示这n件 
物品各自的体积。 
输出:1个整数,表示箱子剩余空间。 
【输入输出样例】 
输入: 
24 6 8 3 12 7 9 7 
输出: 
0

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int main(){int v,n,ans=0,weight[20005]={0},dp[20005]={0};scanf("%d%d",&v,&n); for(int i=0;i<n;i++){scanf("%d",&weight[i]);}for(int i=0;i<n;i++){for(int j=v;j>=weight[i];j--){dp[j]=max(dp[j],dp[j-weight[i]]+weight[i]);ans=max(ans,dp[j]);}}printf("%d",v-ans);return 0;}


原创粉丝点击