?java 遞歸算法 背包問題!!
背包問題.設有一個背包可以放入物品的重量為s,現在n件物品,重量分別為w[0],w[1]......w[n-1].問題是能否從這n件物品中選擇若干件放入此背包中使得放入的重量之和正好等于s. 如果存在一種符合上述要求的選擇,則稱此背包問題有解;否則稱此背包問題無解. 試用分而治之的算法設計求解背包問題的函數.
提示:此背包問題的遞推定義如下(其中true表示有解,false表示無解):
knap(s,n)={true s=0 此時問題有解
knap(s,n)={ flase s<0 總重量不能為負解
knap(s,n)={flase s>0且n<1 物品件數不能為負數
knap(s,n)={knap(s,n-1) s>0且n>=1 所選物品不包括w[n-1]時
knap(s,n)={knap(s-w[n-1],n-1) s>0且n>=1 所選物品包括w[n-1]時
背包問題.設有一個背包可以放入物品的重量為s,現在n件物品,重量分別為w[0],w[1]......w[n-1].問題是能否從這n件物品中選擇若干件放入此背包中使得放入的重量之和正好等于s. 如果存在一種符合上述要求的選擇,則稱此背包問題有解;否則稱此背包問題無解. 試用分而治之的算法設計求解背包問題的函數.
提示:此背包問題的遞推定義如下(其中true表示有解,false表示無解):
knap(s,n)={true s=0 此時問題有解
knap(s,n)={ flase s<0 總重量不能為負解
knap(s,n)={flase s>0且n<1 物品件數不能為負數
knap(s,n)={knap(s,n-1) s>0且n>=1 所選物品不包括w[n-1]時
knap(s,n)={knap(s-w[n-1],n-1) s>0且n>=1 所選物品包括w[n-1]時