装箱问题

来源:互联网 发布:家庭用网络交换机 编辑:程序博客网 时间:2024/05/22 05:04
总时间限制: 
1000ms 
内存限制: 
65536kB
描述

有一个箱子容量为V(正整数,0<=v<=20000),同时有n个物品(0< n<n<=30),每个物品有一个体积(正整数)。

要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。

输入
第一行是一个整数V,表示箱子容量。
第二行是一个整数n,表示物品数。
接下来n行,每行一个正整数(不超过10000),分别表示这n个物品的各自体积。
输出
一个整数,表示箱子剩余空间。
样例输入
2468312797
样例输出
0
来源

NOIP2001复赛 普及组 第四题

背包问题,箱子的体积就是它的价值,转化成求总价值最大

#include <bits/stdc++.h>using namespace std;int d[20005];int a[35];const int maxn = 0x7fffffff;int main(){    int n, V;    cin >> V >> n;    for(int i = 0; i < n; i++) cin >> a[i];    //for(int i = 0; i <= V; i++) d[i] = 0;    int ans = 0;    for(int i = 0; i < n; i++)    {        for(int j = V; j >= 0; j--)        {            if(j - a[i]>= 0)                d[j] = max(d[j], d[j-a[i]]+a[i]);            ans =  max(ans, d[j]);        }    }    cout << V-ans << endl;    return 0;}


原创粉丝点击