1. 程式人生 > 實用技巧 >藍橋杯 ALGO-108 最大體積 dp

藍橋杯 ALGO-108 最大體積 dp

/*
演算法訓練 最大體積
     
資源限制
時間限制:1.0s   記憶體限制:256.0MB
問題描述
  每個物品有一定的體積(廢話),不同的物品組合,裝入揹包會戰用一定的總體積。假如每個物品有無限件可用,那麼有些體積是永遠也裝不出來的。為了儘量裝滿揹包,附中的OIER想要研究一下物品不能裝出的最大體積。題目保證有解,如果是有限解,保證不超過2,000,000,000
  如果是無限解,則輸出0
輸入格式
  第一行一個整數n(n<=10),表示物品的件數
  第2行到N+1行: 每件物品的體積(1<= <=500)
輸出格式
  一個整數ans,表示不能用這些物品得到的最大體積。
樣例輸入
3
3
6
10
樣例輸出
17
*/


#include<iostream>
#include<cstring>
using namespace std;

#define MAX 1000010

bool dp[MAX];
int good[510];
int main()
{
    int ans = 0;
    int n;
    cin >> n;
    memset(dp, false, sizeof dp);
    dp[0] = true;

    for(int i = 1; i <= n; i++)
        cin >> good[i];
    
    for(int i = 1; i <= MAX; i++)
    {
        for(int j = 1; j <= n; j++)
        {
            if(i >= good[j])
            {
                if(dp[i-good[j]])
                {
                    dp[i] = true;
                    break;
                }

            }
        }
        if(!dp[i]) ans = i;
    }
    cout << ans;
    system("pause");
    return 0;
}