王道計算機機試練習 動態規劃完全揹包儲存罐

2021-10-08 17:28:02 字數 758 閱讀 2801

有乙個儲蓄罐,告知其空時的重量和當前重量,並給定一些錢幣 的價值和相應的重量,求儲蓄罐中最少有多少現金。 由於每個錢幣的數量都可以有任意多,所以該問題為完全揹包問題。

但是在該例中,完全揹包有兩處變化,首先,要求的不再是最大值,而變為了最小值, 這就要求我們在狀態轉移時,在 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...