由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - Given coins of value {k1, k2, ..., km}, 用最少硬币数组成一个sum 咋做啊
相关主题
Target coins找零钱dp的问题
问道硬币题目An online coding test problem
请教一道面试题一道概率面试题 有包子
一个数组给一个int n, 求数组内能相加得到n的所有组合同学们, 看看这几行code有区别吗>
这个题目怎么做的啊?说说某著名软件公司的onsite面试
Google取硬币的题继续贴几个题目
cc150 Find all combinations of coins问题俺也贡献几道面试题.
F家的一道题。看起来好像很凶残的样子。求大家给思路给想法。。囧请教一个careercup第四版上的一个题目
相关话题的讨论汇总
话题: int话题: dp话题: total话题: min话题: denom
进入JobHunting版参与讨论
1 (共1页)
i******t
发帖数: 22541
1
dp方法
z*******3
发帖数: 13709
2
这题有最优解么?
s***5
发帖数: 2136
3
这不最basic的DP吗?

【在 i******t 的大作中提到】
: dp方法
Y********f
发帖数: 410
4
可以重复吗?如果允许重复的话就是bfs
不允许重复用dp,记录当前能够对应每个数的最少硬币数和最后一个硬币

【在 i******t 的大作中提到】
: dp方法
b******7
发帖数: 92
5
完全背包问题
f(i,v) = min{f(i-1,v), f(i-1,v - k[i])+1}
f(i,v) 用f(v)表示
初始f(v) = MAX_INT (v = 1,..., sum), f(0) = 0
for i = 0 ... m-1
for v = 1...sum
if v >= k[i] and f(v-k[i]) + 1 < f(v)
f(v) = f(v-k[i]) + 1
return f(sum)
参见:三种背包问题http://www.wutianqi.com/?p=539
r****7
发帖数: 2282
6
bfs怎么解?

【在 Y********f 的大作中提到】
: 可以重复吗?如果允许重复的话就是bfs
: 不允许重复用dp,记录当前能够对应每个数的最少硬币数和最后一个硬币

j**7
发帖数: 143
7
public static int minCoinsFor(int[] denom, int total) {
int[][] choice = new int[denom.length + 1][total + 1];
int[][] DP = new int[denom.length + 1][total + 1];
DP[denom.length][0] = 0;
for (int i = 1; i <= total; i++) {
DP[denom.length][i] = -1;
}
for (int i = denom.length - 1; i >= 0; i--) {
for (int j = 0; j <= total; j++) {
int min = -1;
for (int k = 0; k * denom[i] <= j; k++) {
int temp = DP[i + 1][j - k * denom[i]];
if (temp != -1) {
temp = temp + k;
if (min == -1) {
choice[i][j] = k;
min = temp;
} else if (temp < min) {
min = temp;
choice[i][j] = k;
}
}
}
DP[i][j] = min;
}
}
int min = DP[0][total];

if (min != -1) {
for (int i = 0; i < denom.length; i++) {
if (choice[i][total] != 0) {
System.out.print(choice[i][total] + ":" + denom[i] + "s
");
total = total - choice[i][total] * denom[i];
}
}
System.out.println();
}

return min;
}
r**h
发帖数: 1288
8
不需要ls这么复杂啊,1D的经典多重背包问题
a = [1, 3, 5, 7, 9]
num = [9999 for i in range(30)]
num[0] = 0
for coin in a:
i = coin
while i<30:
if num[i-coin]+1 < num[i]:
num[i] = num[i-coin]+1
i = i+1
print(num)
1 (共1页)
进入JobHunting版参与讨论
相关主题
请教一个careercup第四版上的一个题目这个题目怎么做的啊?
请教一道有趣的算法题,请大侠点拨一下思路Google取硬币的题
Apple Onsite?cc150 Find all combinations of coins问题
关于DP的问题F家的一道题。看起来好像很凶残的样子。求大家给思路给想法。。囧
Target coins找零钱dp的问题
问道硬币题目An online coding test problem
请教一道面试题一道概率面试题 有包子
一个数组给一个int n, 求数组内能相加得到n的所有组合同学们, 看看这几行code有区别吗>
相关话题的讨论汇总
话题: int话题: dp话题: total话题: min话题: denom