algorithm - 动态规划 - 达到给定目标的组合数量
问题描述
这是一个基本的动态规划问题 - 分数组合的数量。我知道这个问题的自下而上方法效果很好。
但是,我无法为该问题找到一种自上而下的解决方案。缓存递归部分为我们提供了更多必要的组合(其中分数的排序/序列也是一个因素,因此,为了避免它,我们需要提供一个约束以使序列单调增加。这是相同的递归方法。动态编程- 达到给定分数的不同组合的数量
这是我当前的代码:
#include <iostream>
#include <vector>
using namespace std;
int helper(int target, vector<int>& coins, vector<int>& cache, int min) {
if(target < 0) return 0;
if(target == 0) return 1;
if(cache[target] != 0) return cache[target];
for(auto& c : coins) {
if(target >= c && min <= c) {
//cout << min << " " << c << " " << target << endl;
cache[target] += helper(target-c, coins, cache, c) ;
//cout << cache[target] << endl;
}
}
return cache[target];
}
int main() {
vector<int> coins{2, 3};
int target = 7;
vector<int> cache(target+1, 0);
cache[0] = 1;
cache [7] = helper(target, coins, cache, 1);
for (auto& x : cache) cout << x << endl;
return 0;
}
这是可运行的ideone链接。
解决方案
推荐阅读
- javascript - 当另一个元素在它上面时从 div 获取标题
- html - 突出显示 div,并使页面上的其他内容变暗
- python - 比较和更新字典?
- variables - Powerapps - 图库中的变量
- excel - 对象“HPageBreaks”的方法“计数”失败
- c# - 如何禁用 StyleCop Plus 规则 SP2001“仅允许使用制表符进行缩进”
- core-audio - 如何在 AUInternalRenderBlock 中实时使用 Superpower TimeStretching
- wordpress - 如何从单个仪表板管理多个 wordpress 帖子?
- vba - 用于移动电子邮件的 Outlook 宏将副本发送到删除文件夹
- javascript - router.use() 在本地机器上工作,但在服务器上分解时它不起作用