機試演算法講解 第55題 Piggy Bank

2021-09-25 16:50:46 字數 1278 閱讀 5930

/*

問題:與乙個儲蓄罐,告知空的質量和當前重量,並給定一些錢幣的價值和相應的重量,求儲蓄罐中最少有多少現金。

輸入:包含t組測試用例。第一行。每乙個測試用例包含2個整數e和f,表明空儲蓄罐的重量和裝滿錢的重量。<=10,000g,第二行是每個測試用例,包含乙個整數n(1<=n<=500),

給出了各種硬幣的數量。接下來是n行,每行表示一種硬幣型別,每行包括2個整數,p,w(1<=p<=50000,1<=w<=10000),p是價值,w是重量

輸出:儲蓄罐中最少有多少錢輸入3

10 110

21 1

30 50

10 110

21 1

50 30

1 62

10 3

20 4

輸出:the minimum amount of money in the piggy-bank is 60.

the minimum amount of money in the piggy-bank is 100.

this is impossible.

分析:完全揹包問題的變體。1不求最大值,求最小值。則程式中選擇價值小的那個,2要求錢幣和空儲蓄罐的重量恰好達到總重量,在揹包問題中表現為揹包恰好裝滿。

關鍵:1 由於你獲取物品的時候是從i = 1開始獲取的,因此揹包計算的時候i也必須從1開始遍歷

參考:

計算機考研--機試指南

*/#include #include #include #define int_max 0x7fffffff

#define n 10001

typedef struct list

list;

int min(int a,int b)

int main(int argc,char* ar**)

//初始化完全揹包,除dp[0]外其餘狀態均不存在

for(i = 0 ; i <= s ;i++)

dp[0] = 0;

//開始揹包計算,注意遍歷所有物品從物品1開始計算,因為物品0根本沒有複製

//for(i = 0 ; i <= n ; i++)

for(i = 1 ; i <= n ; i++)}}

//如果狀態不可得

//if(-int_max==dp[s])

if(int_max==dp[s])

else

}} system("pause");

getchar();

return 0;

}

機試演算法講解 第58題 輸入外掛程式

輸入外掛程式 scanf快於 cin,在scanf基礎上再次優化,使那些剛超時一點的程式能夠卡金時限範圍。原理 在讀入緩衝中字元的前提下,手動分析字串中輸入的整數 浮點數等我們需要的輸入型別,並將其儲存在變數中 include include include 輸入整數,並將整數儲存在引用變數ret中...

機試演算法講解 第7題 輸出梯形

問題 輸入高度h,輸出高為h,上底邊圍h的梯形 思路 由於多出的底邊x可以設為任意值,不放設x h 第1行,h h 第2行,列印h 1個空格,1個 然後列印h個空格,再列印1個 h 2 1 3 h 2 1 h 2 1 1個 h 2 2 4 h 3個空格,1個 h 2 2 1個 h 1 2 1個 h ...

機試演算法講解 第9題 找x

問題 輸入乙個數n,輸入n個數值不同的數,輸入給定值x,輸出x在陣列中的下標,從0開始,若不在陣列中則輸出 1 輸入 2 1 30 輸出 1 思路 用哨兵,從後向前搜尋 參考 計算機考研 機試指南 include include include int main int argc,char ar i...