藍橋杯試題 演算法訓練 裝箱問題

2021-10-04 23:14:34 字數 1209 閱讀 3092

題目描述:

資源限制

時間限制:1.0s 記憶體限制:256.0mb

問題描述

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

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

輸入格式

第一行為乙個整數,表示箱子容量;

第二行為乙個整數,表示有n個物品;

接下來n行,每行乙個整數表示這n個物品的各自體積。

輸出格式

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

樣例輸入246

83127

97樣例輸出

0解題思路:

動態規劃,我們這裡將最優解定義為不超過箱子體積的裝進箱子的所有物品的最大體積。

設dp[i][j]表示表示從前i個物品中 挑選若干裝箱,箱子容量為j的情況下的最優解(最大的體積),如果想求dp[i][j],必須知道dp[i-1][j]。假如我們現在知道了dp[i-1][j]的值,怎麼推出dp[i][j]?,我們可以知道,dp[i][j]與dp[i-1][j]的聯絡就在於第i個物品怎麼選擇(是否裝箱),如果不將第i個物品裝箱,那麼dp[i][j]=dp[i-1][j]如果將第i個物品裝箱,那麼dp[i][j]=max(dp[i-1][j-temp]+temp,dp[i-1][j]);求取兩種情況的最大值即可。

需要提醒的不是每乙個物品都可以有兩個狀態(裝箱或者不裝箱),有的物品如果裝不下,則直接不裝箱,不用考慮裝箱的情況。

ac**:

#include

#include

#include

#include

#include

#include

using

namespace std;

int v[35]

;//n個物品的體積

int dp[35]

[20005];

intmain()

//從n個物品中挑選一些裝箱,求這些物品的總體積不超過v的最大體積

} cout<[volume]

}

試題 演算法訓練 Anagrams問題 藍橋杯

試題 演算法訓練 anagrams問題 資源限制 時間限制 1.0s 記憶體限制 512.0mb 問題描述 anagrams指的是具有如下特性的兩個單詞 在這兩個單詞當中,每乙個英文本母 不區分大小寫 所出現的次數都是相同的。例如,unclear 和 nuclear rimon 和 minor 都是...

藍橋網 演算法訓練 裝箱問題

問題描述 有乙個箱子容量為v 正整數,0 v 20000 同時有n個物品 0 n 30 每個物品有乙個體積 正整數 要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。輸入格式 第一行為乙個整數,表示箱子容量 第二行為乙個整數,表示有n個物品 接下來n行,每行乙個整數表示這n個物品的各自體積...

藍橋杯VIP試題 演算法訓練 排列問題

資源限制 時間限制 1.0s 記憶體限制 512.0mb 問題描述 求乙個0 n 1的排列 即每個數只能出現一次 給出限制條件 一張n n的表,第i行第j列的1或0,表示為j 1這個數不能出現在i 1這個數後面,並保證第i行第i列為0 將這個排列看成乙個自然數,求從小到大排序第k個排列。資料規模和約...