有乙個儲蓄罐,告知其空時的重量和當前重量,並給定一些錢幣 的價值和相應的重量,求儲蓄罐中最少有多少現金。 由於每個錢幣的數量都可以有任意多,所以該問題為完全揹包問題。
但是在該例中,完全揹包有兩處變化,首先,要求的不再是最大值,而變為了最小值, 這就要求我們在狀態轉移時,在 dp[j]和 dp[j-list[i].w]+list[i].v 中選擇較小的轉移 值;其次,該問題要求錢幣和空儲蓄罐的重量恰好達到總重量,即在揹包問題中 表現為揹包恰好裝滿,在前文中我們已經討論了 0-1 揹包的此類變化,我們只需 變化 dp[j]的初始值即可。
#include
# define inf 0x7fffffff
intmin
(int a,
int b)
struct e list[
500]
;int dp[
10001];
intmain()
for(
int i =
0; i <= s; i++
) dp[0]
=0;for
(int i =
1; i <= n; i++)}
if(dp[s]
!= inf)
printf
("%d\n"
, dp[s]);
else
puts
("this is impossible!");
}return0;
}
王道計算機機試練習 哈夫曼樹
題目描述 哈夫曼樹,第一行輸入乙個數 n,表示葉結點的個數。需要用這些葉結點生 成哈夫曼樹,根據哈夫曼樹的概念,這些結點有權值,即 weight,題目需要輸出 所有結點的值與權值的乘積之和。1 將所有結點放入集合 k。2 若集合 k 中剩餘結點大於 2 個,則取出其中權值最小的兩個結點,構造他 們同...
王道計算機機試練習 高精度大整數隨意進製換算
將 m 進製的數 x 轉換為 n 進製的數輸出。輸入 輸入的第一行包括兩個整數 m 和 n 2 m,n 36 下面的一行輸入乙個數 x,x 是 m 進製的數,現在要求你將 m 進製的數 x 轉換成 n 進製的數輸出。輸出 輸出 x 的 n 進製表示的數。該題初看起來很像一般的進製轉換,但提示中明確告...
計算機機試練習題 排序二
題目描述 有n個學生的資料,將學生資料按成績高低排序,如果成績相同則按姓名字元的字母序排序,如果姓名的字母序也相同則按照學生的年齡排序,並輸出n個學生排序後的資訊。輸入 測試資料有多組,每組輸入第一行有乙個整數n n 1000 接下來的n行包括n個學生的資料。每個學生的資料報括姓名 長度不超過100...