AYOJ 装箱问题(01背包剩余容量)

题目描述

 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。
  要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。

输入格式

 第一行为一个整数,表示箱子容量;
  第二行为一个整数,表示有n个物品;
  接下来n行,每行一个整数表示这n个物品的各自体积。

输出

一个整数,表示箱子剩余空间。

样例输入

24
6
8
3
12
7
9
7

样例输出

0

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 int main()
 5 {
 6     int s, v[40], n, i, a[40], j;
 7     cin >>s>> n;
 8     for(i = 0; i < n; i++)
 9     {
10         cin >> a[i];
11         v[i] = s;
12     }
13     sort(a, a + n);
14     for(j = 0; j < n; j++)
15         for(i = n - 1 - j; i >= 0; i--)
16         {
17             if(v[j] >= a[i])
18                 v[j] -= a[i];
19         }
20         sort(v, v + n);
21     cout << v[0] << endl;
22 }
View Code

 

posted @ 2014-03-15 18:30  SStep  阅读(319)  评论(0编辑  收藏  举报