IT筆試 動態規劃 貨幣找零問題

2021-08-07 17:28:05 字數 1336 閱讀 2707

題目:

你要出去旅遊,有n元的預算住酒店,有m家酒店供你挑選,這些酒店都有**x。

需要你正好花完這n元住酒店(不能多,也不能少)最少能住幾晚?返回最少住的天數,沒有匹配的返回-1

* 比如你有1000元,所有酒店都是大於1000的,則返回-1

* 比如你有1000元,有1家1000元的,有1家300,有1家700。則最少能住1晚,最多住2晚(300+700)。返回1

* 比如你有1000元,有1家387元,有1家2元,有一家611,則返回3(3家各住1天)

* 比如你有1000元,有1家1元的,有一家2元的,有一家1001元的,則返回500(1元的1000天,2元的500天)

樣例輸入

1001 1002 1003 2001 1000

樣例輸出

-1題目原型:給定陣列a,值都為正數且不重複,每個值代表一種貨幣,每種貨幣可以使用任意張

給定乙個aim代表要找的錢數,求組成aim的最少貨幣?

arr:5,2,3 aim=20; 4張5元的可以組成20,且張數最少

時間複雜度o(n*m), 空間複雜度o(n*m)

public static int mincoins(int arr, int aim)  else 

} /*

* 另一種初始化方式,除法,求餘運算慢,沒有動態規劃思想    

for (int j = 1; j < aim + 1; j++) else

}       */

for (int i = 1; i < n; i++) else

}} return dp[n - 1][aim] != max ? dp[n - 1][aim] : -1;

}

壓縮空間,線性空間複雜度

public static int mincoins2(int arr, int aim) 

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

}} return dp[aim] != max ? dp[aim] : -1;

}

不需要初始化,有點難理解

/*

* 網上參考的解法

*/public static int mincoins3(int arr, int aim)

if (dp[aim] != integer.max_value)

return dp[aim];

else

return -1;

}

找零問題 動態規劃

當乙個幣值組合用貪婪演算法不能找出最優解的時候,比如對於 1,2,5 7,10。如果找14元錢的話,貪婪演算法答案是10,2,2,但最優解為7,7。那麼利用動態規劃就能找出最優解,只是時間和空間複雜度都很高,o nm 首先寫出狀態方程 f i 1,x 如果v i x 即當如果當前選擇的幣值大於找零的...

硬幣找零問題(動態規劃)

給定指定的硬幣種類,面值為 1,3,5 在此具體化些 給定所找零的錢數 sum,給出最少的硬幣找零數,每個種類的硬幣無限使用。看到這問題,當時我想到用貪心演算法來求解,最後求解方案因為巧合對了,後來在網上看到動態規劃的題目,才知道貪心演算法得不到最優解,比如 給定 面值為 1,3,4,給定找零數為 ...

硬幣找零問題 動態規劃問題

看到了 這文章,由於我不太懂他的 所以我按他的題和思路,寫了 思路我就不寫了,就是動態規劃的思路,先保證區域性最優,再慢慢向全區域性最優 include include include include using namespace std const int m 100 int coinsum m...