分析:例如資料
10 2
20 1
30 1
獲得這樣乙個降序的陣列:30 20 10 10 (兩個10是因為10值物品有兩個)
總物品價值的一半為揹包容量,然後從價值大的物品開始選,當當前揹包中物品價值加上將要放的物品的價值大於揹包容量的時候,將要放入揹包的物品不放入
注意點1.n為負數的時候停止迴圈,而不是n==-1
2.揹包容量為有小數的數時,取ceil上極限
3.陣列排序降序,公升序的話不好處理資料
特殊資料
10 2
20 1
21 1
答案:31 30
**如下:
#includeusingnamespace
std;
intmain()
}temp=ceil(sum*1.0/2.0
); sort(q,q+len);
double a=0.0,b=0.0
;
for(int i=len-1;i>=0;i--)
b=sum-a;
if(b>a)
printf(
"%.0lf %.0lf\n
",a,b);
}}
自己還是太菜。。。寫了兩小時。。。。。。。。
飯卡 HDU(揹包問題)
原題目 電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買乙個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功 即使購買後卡上餘額為負 否則無法購買 即使金額足夠 所以大家都希望盡量使卡上的餘額最少。某天,食堂中有n種菜 每種菜可購買一次。已知每種菜的 以及卡上的餘額...
HDU 1059 揹包問題
揹包問題 題意 輸入 個整數,分別表示 到 六個數字的個數,問能否組合成兩組,這兩組所有數字的總和相同 include include include include include include include includeusing namespace std const int maxn ...
HDU 1114 揹包問題
題意就是 給你一定的空間,一定種類的硬幣,每種硬幣可以重複使用多次,讓我們計算消耗這麼多的空間的最小質量 dp i 1 j 表示的就是從前i種硬幣中挑選質量小於j的最小價值 轉移方程 dp i 1 j min dp i j dp i 1 j w i v i 選取第i個 include include...