c++ - 关于 c++ 中问题的最小函数(CP 和动态编程)
问题描述
这是一个解决需要多少硬币才能形成特定数字的函数。IE 我们想用 {1, 2, 3, 4, 1, 1} 个硬币形成总和 6。组成 6 所需的最少硬币数量是多少?DP(Dynamic Programming)中的最优解:4+2
问题是为什么我们将一个数字与无穷大进行比较?在 for 循环中的最佳变量中。
int solve(int x)
{
if (x < 0)
return 100;
if (x == 0)
return 0;
if (ready[x])
return value[x];
int best = INFINITY;
for (int c : coins)
{
best = min(best, solve(x - c) + 1);
}
value[x] = best;
ready[x] = true;
return best;
}
解决方案
INFINITY
是可用的最高数值浮点值。这意味着,每个数字都应该小于无穷大。由于best
需要在使用前进行初始化,所以将其初始化为最大值是最有意义的。
推荐阅读
- python - 找不到资源punkt。但是,它已下载并安装
- ajax - NGINX CORS 问题
- c++ - 我可以检测一个类是否有任何公共的非静态数据成员吗?
- c# - XElement 上的 XPath 列表
- flutter - 如何在颤振中创建自定义材质文本字段
- node.js - Firebase 云功能日志。我在日志中看不到我的所有数据
- javascript - 使用 es6 以更好的方式初始化具有未知键的对象数组
- mongodb - 命令copydb的MongoDB授权问题
- php - 如何预测或检查外部网站(不属于我)是否会向我发送 $_SERVER['HTTP_REFERER'] 的值
- flask-uploads - Flask-上传模块