|
是個關(guān)于拓展歐幾里得的問題,但是很難想到。這題也是看了結(jié)題報告的~~
關(guān)于拓展歐幾里得的算法http://mj-zhang.blogbus.com/tag/拓展歐幾里得/
大意是給N個瓶子,每個瓶子有個容量C,給定一個容量W,每次只能(1)灌滿一個,(2)倒空一個,(3)把一個的水倒給另一個,直到一個滿了或者一個空了。通過三種操作,有沒有可能最后達(dá)到某個瓶子里有W的水??梢赃@樣考慮:
1)當(dāng)所有C都小于W,肯定不行;
2)如果有N個瓶子,N個瓶子的容量C1, C2, C3 ... Cn必然有個最大公約數(shù)P。
證明:假設(shè)n個水壺的容量分別為C1,C2,C3…..Cn. 必要性:不管執(zhí)行三種操作的那一種,壺中所含的水一定是P的整數(shù)倍. 充分性:由歐幾里德算法擴(kuò)展可知,必然存在整數(shù)A1,A2,A3…..An,使得 A1*C1+A2*C2+A3*C3+…+An*Cn=W. 如果Ai是正數(shù),我們就用第i個壺從水源中取Ai次水;如果Ai為負(fù)數(shù),我們就把第i個壺倒空Ai次,這樣最后必會剩下W升水
|