【发布时间】:2018-12-04 19:51:56
【问题描述】:
我正在做硬币排问题。我遇到了一个小问题。
有一排 n 个硬币,其值为一些正整数c1, c2, . . . , cn,不一定不同。
目标是在你不能捡起任何两个相邻硬币的限制下捡起最大数量的钱。例如,在下面的例子中,一旦你拿起10,你就不能选择6或左边的2。
例子:
enter the number of coins: 6
enter the value of all coins : 5 1 2 10 6 2
The maximum amount of coin : 17
The selected coins to get maximum value : C1 , C4 , C6
我想获得选定的硬币(前 C1、C4、C6)。
这是我的功能代码 我只能在这段代码中获得最大数量。
int getanswer(int array[],int len)
{
int C[20];
for (int j = 0; j < len; j++)
{
C[j + 1] = array[j];
}
int F[20];
F[0] = 0;
F[1] = C[1];
for (int j = 2; j < len+1; j++)
{
F[j] = max(C[j] + F[j - 2], F[j - 1]);
printf("temp :%d\n", C[j]);
}
return F[len];
}
如何使用我的代码获得选定的硬币?
【问题讨论】:
-
在“我应该如何编码”之前,您应该问(自己)“算法是什么?”。
-
@EugeneSh。 “算法是什么,我应该如何编码?”怎么样? (不过,我很确定这个问题可以进一步改进)
-
@Swordfish 那是我会在没有评论的情况下进行 VTC 的事情 :)
-
您的问题是什么?建议如何以任何方式做到这一点,即低效的蛮力可以吗?或者您是否已经有了蛮力解决方案并要求优化?在后一种情况下,请显示您拥有的代码。
-
在“我应该如何编码”之前问问自己“我应该选择哪种语言”并选择 C 或 C++。它们是不同的语言。例如,C++ 的
std::vector用于运行时,std::string用于文本。 C 语言没有。