[問題描述]:
有乙隻天平和n只砝碼,如何設計這n只砝碼,才能使這天平能夠連續秤出的重量最大?假設砝碼的最小單位為1克,秤物時物品放在天平的左邊,砝碼可以放在右邊也可以放在左邊,不管放在哪一邊只要天平能夠平衡就行,物品的重量應是右邊砝碼總重量減去左邊砝碼的重量。
輸入乙個物品的重量,輸出其秤重方案。
[分析與演算法選擇]:
這個問題是從乙個經典的數學問題變化而來,這個數學問題的大意是:乙個物體重40磅,掉在地上後摔成四片,這四片恰好能夠作為砝碼連續秤出40磅以內的物品的重量,這四片的重量如何?
(1)如何設計砝碼?
我們先不去看單位,直接用數字來描述。因為要能連續秤出一範圍內的值,所以首先要有1,從數學上可以知道,n只砝碼本身最大能秤的總重就是這n只砝碼的重量和,下面就看如何保證連續的數都能秤出了。設這n只砝碼的重量分別為w1、w2……wn,且有w1<=w2<=……<=wn, w1=1,下面看w2如何設計。
如果w2=1,1、2都能秤出;如果w2=2,1、2、3都能秤出;如果w2=3,1可以秤出(w1)、2可以秤出(w2-w1)、3可以秤出(w2)、4也可以秤出(w1+w2);如果w2=4,則2不能秤出;所以w2最大為3(=3*w1)。
同理可推出w3最大為9(=3*w2);
……wn最大為3n-1(=3*wn-1)。
設計方案為這n只砝碼重分別為:1、3、9、27、……、3n-1。
(2)如何根據物品重量得到秤重方案?
物品(+砝碼) 砝碼
因為物品固定放在一連(如左邊),只要考慮砝碼放的情況。任乙個砝碼都可能有三種狀態:一是跟被秤物品放在一起(如左邊),二是不放,三是放在物品另一邊(如右邊)。最後物品的重量等於所有砝碼乘上相應係數的和。這個係數可能是:-1、0、1。
先來看3只砝碼時各種重量的稱法,如下表所示,其中-1表示砝碼放在物品一邊、0表示砝碼不放進天平、1表示砝碼放在物品另一邊,如果每一位加1後便只會是0、1、2這3個數字中的乙個,所以可以方便地跟三進製數對應起來:
物品重量
3只砝碼
每一位加1
三進製數
十進位制數
14(=1+13)
-115(=2+13)
16(=3+13)
17(=4+13)
-1-1
18(=5+13)
-119(=6+13)
-120(=7+13)
-121(=8+13)
22(=9+13)
23(=10+13)
-124(=11+13)
25(=12+13)
26(=13+13)
由上表我們可以總結出這樣的計算方法:對於給定的物品重量,先確定它最多用到多大的砝碼,假定是3n-1,那麼先將這個物品的重量加上1、3、……3n-1,得到乙個數,再對這個數進行除3取餘運算,當餘數為0時表示相應的砝碼跟物品放在一起,餘數為1時表示相應的砝碼不放,為2時表示放在物品的另一邊。
(演算法)天平問題
我們用乙個等臂天平來稱物體的質量,如果我們要稱的物體質量範圍在1到40克 整數 請問我們最少需要幾塊砝碼可以完成這項物體質量的稱量?將上述問題轉換為乙個數學問題,即通過什麼樣的數字組合來表示某個範圍整數。具體到題目,就是怎麼樣來表示1到40,可以很快想到我們表示整數的方法,二進位制 十進位制等等。那...
DP地獄訓練 砝碼秤重
時間限制 1 sec 記憶體限制 64 mb 提交 610 解決 270 提交 狀態 討論版 設有n種砝碼,第k種砝碼有ck個,每個重量均為wk,求 用這些砝碼能秤出的不同重量的個數,但不包括乙個砝碼也不用的情況。輸入的第一行只有乙個數n,表示不同的砝碼的種類數.第2行至第n 1行,每行有兩個整數....
洛谷 1441 砝碼秤重
題意概述 現有n個砝碼,重量分別為a1,a2,a3,an,在去掉m個砝碼後,問最多能稱量出多少不同的重量 不包括0 題解 先dfs決定用哪些砝碼,然後dp求可以稱出的重量有多少種 1 include2 include3 include4 using namespace std 5const int ...