1014 裝箱問題 WIKI




揹包問題鏈接:點擊打開鏈接

1014 裝箱問題

2001年NOIP全國聯賽普及組

時間限制: 1 s
空間限制: 128000 KB
題目等級 : 黃金 Gold
              
                               
題目描述 Description

有一個箱子容量爲V(正整數,0<=V<=20000),同時有n個物品(0<n<=30),每個物品有一個體積(正整數)。

要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間爲最小。

輸入描述 Input Description

一個整數v,表示箱子容量

一個整數n,表示有n個物品

接下來n個整數,分別表示這個物品的各自體積

輸出描述 Output Description

一個整數,表示箱子剩餘空間。

樣例輸入 Sample Input

24

6

8

3

12

7

9

7

樣例輸出 Sample Output

0

數據範圍及提示 Data Size & Hint 

 //嗯,就是一個01揹包問題的變體,就是體積與價值相同

#include<algorithm>
#include<iostream>

using namespace std;

int dp[20001];
int vi[31];
int i,j;
int v,n;
void zero_one_pack(int cost,int value)
{
    for(j = v; j >= vi[i];j--)
    {
        dp[j] = max(dp[j],dp[j - cost] + value);
    }
}
int main()
{

   cin >> v >> n;
   for(i = 0;i < n;i++)
   {
       cin >> vi[i];
   }

   for(i = 0; i < n; i++)
   {
       zero_one_pack(vi[i],vi[i]);
   }
   cout << v - dp[v] << endl;

    return 0 ;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章