最少數量貨物裝箱問題

2021-09-26 04:36:50 字數 1217 閱讀 1765

題目描述

有重量分別為3,5,7公斤的三種貨物,和乙個載重量為x公斤的箱子(不考慮體積等其它因素,只計算重量)

需要向箱子內裝滿x公斤的貨物,要求使用的貨物個數盡可能少(三種貨物數量無限)

輸入描述:

輸入箱子載重量x(1 <= x <= 10000),乙個整數。

輸出描述:

如果無法裝滿,輸出 -1。

如果可以裝滿,輸出使用貨物的總個數。

示例1輸入4輸出

-1說明

無法裝滿

思考一

本題肯定要用貪心的思想,給出箱子的體積肯定要先裝最大的,如果最大的裝不下則裝體積較小的,依次類推。。。本題中裝箱順序為7,5,3

給定乙個箱子的體積x(假設x>7),按照貪心演算法,肯定先裝體積為7的貨物。接下來考慮剩餘體積y=x-7是否能裝下剩餘的體積,如果剩餘的y>7則繼續迴圈執行上述步驟且貨物數量加一,如果y<7那麼就要去試探裝體積為5或3的貨物。

由於是在試探的迴圈執行,首先想到的是遞迴演算法。每種情況的遞迴返回條件要麼是箱子裝不下要麼是找到合適的裝法

#include "iostream"

using namespace std;

void dfs(int count, int x)

dfs(count + 1, x - 7);//嘗試先裝體積為7的貨物

dfs(count + 1, x - 5);

dfs(count + 1, x - 3);

}int main1()

}

思考二

由思考一可知當給定箱子體積並選擇了乙個貨物後,要考慮剩下的體積,也就是子問題的最優解。比如給定箱子體積19,裝入體積為7的貨物後,問題變成了箱子體積12的最優解,針對這種問題要想到動態規劃。dp[i]為箱子容積為i時裝滿箱子所需要的最少貨物數目

#include "iostream"

#include "vector"

#include "algorithm"

using namespace std;

int main()

if (dp[x] == int_max)

cout << -1 << endl;

else

cout << dp[x] << endl;

}}

快手校招面試題 最少數量貨物裝箱問題

時間限制 c c 1秒,其他語言2秒空間限制 c c 32m,其他語言64m 有重量分別為3,5,7公斤的三種貨物,和乙個載重量為x公斤的箱子 不考慮體積等其它因素,只計算重量 需要向箱子內裝滿x公斤的貨物,要求使用的貨物個數盡可能少 三種貨物數量無限 輸入描述 輸入箱子載重量x 1 x 10000...

快手簡單揹包筆試題 最少數量貨物裝箱問題

有重量分別為3,5,7公斤的三種貨物,和乙個載重量為x公斤的箱子 不考慮體積等其它因素,只計算重量 需要向箱子內裝滿x公斤的貨物,要求使用的貨物個數盡可能少 三種貨物數量無限 輸入箱子載重量x 1 x 10000 乙個整數。如果無法裝滿,輸出 1。如果可以裝滿,輸出使用貨物的總個數。示例1 4 1無...

用最少數量的箭引爆氣球

在二維空間中有許多球形的氣球。對於每個氣球,提供的輸入是水平方向上,氣球直徑的開始和結束座標。由於它是水平的,所以y座標並不重要,因此只要知道開始和結束的x座標就足夠了。開始座標總是小於結束座標。平面內最多存在104個氣球。一支弓箭可以沿著x軸從不同點完全垂直地射出。在座標x處射出一支箭,若有乙個氣...