Recursion 简易动态规划递归公式(uva 147硬币兑换)
问题在于硬币兑换——“你可以用多少种方式兑换3、5、10美元?” 如果你有5c,10c " 这个问题在各种博客上多次得到解决(解决方案) 在dp中,最难的事情是理解子问题之间的关系并得到公式(最优子结构) 我只给出了实际的for循环,该循环将路径存储到2d表中,如解决方案所示:Recursion 简易动态规划递归公式(uva 147硬币兑换),recursion,dynamic-programming,acm-java-libraries,Recursion,Dynamic Programming,Acm Java Libraries,问题在于硬币兑换——“你可以用多少种方式兑换3、5、10美元?” 如果你有5c,10c " 这个问题在各种博客上多次得到解决(解决方案) 在dp中,最难的事情是理解子问题之间的关系并得到公式(最优子结构) 我只给出了实际的for循环,该循环将路径存储到2d表中,如解决方案所示: for (int i = 2; i <= NCHANGES; ++i){ for (int m = 1; m <= MAX_AMOUNT; ++m){ if (m >= coins[i])
for (int i = 2; i <= NCHANGES; ++i){
for (int m = 1; m <= MAX_AMOUNT; ++m){
if (m >= coins[i])
n[i][m] = n[i-1][m] + n[i][m - coins[i]];
else
n[i][m] = n[i-1][m];
}
我的想法
例如:
(其他情况)
- 我有5美分和1枚硬币可供使用:5c。只有一种方式:5c=1*5c (商店n[5][coin(5)])
- 我有5c和2枚硬币的数量可供使用:5c和10c我不能同时使用5c和10c=>我返回到一种方法(将1储存在表中,用于n[5][coin(5,10)]) 对于这种情况
你能解释一下第一种情况吗n[i][m]=n[i-1][m]+n[i][m-硬币[i]]?好的,我在一个网站上找到了它-同样的问题 硬币兑换周期: a[i][j]=a[i-1][j](d[i]>j) (如果硬币不能使用,则不要使用)
为什么没有人看这个问题?
if (m >= coins[i])
n[i][m] = n[i-1][m] + n[i][m - coins[i]];
else
n[i][m] = n[i-1][m];