algorithm - DP中的硬币制作问题 - 使用二维备忘录表得到错误答案
问题描述
当我通过这个输入时,我得到了错误的答案
硬币[] = {5,6}
数量(W) = 10
我的答案 = 1
正确答案应该是 2 即 {5,5}
void coin_make(int W, vector<int> coin){
int n = coin.size();
int dp[n+1][W+1];
for(int i = 0; i <=W; i++){
dp[0][i] = INT_MAX;
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= W; j++){
if(coin[i-1] == j){
dp[i][j] = 1;
}
else if(coin[i-1] > j){
dp[i][j] = dp[i-1][j];
}
else {
dp[i][j] = min(dp[i-1][j],
1 + dp[i][j-coin[i-1]]);
}
}
}
cout<<dp[n][W];}
解决方案
你已经溢出来了dp[1][6]
,因为你试图计算1 + INT_MAX
。此错误进一步传播,最终答案不正确。当我在我的机器上运行它时,我得到了-2147483648
. 您应该使用其他一些常量作为“无穷大”来防止溢出(例如2e9
(或-1
,但这需要一些额外if
的语句))。然后代码将在您提供的测试用例上正常工作。
推荐阅读
- javascript - 邮递员表单数据不起作用验证失败的节点js
- html - 十进制字段的字符串值不会在视图中抛出 ValidationError 但在 shell 中工作正常
- formik - Formik Yup 模式中的循环依赖
- mysql - phpmyadmin中的灰色键是什么意思?
- android - 与 kotlin 的壁画?
- database - Access 中的主键
- excel - Excel:在表格列中运行项目
- netsuite - 从 SOAP 请求创建采购订单时,NetSuite UserEvent 执行日志不起作用
- java - 即使定义了属性,Spring boot 也不会从配置中创建 bean
- python - 从python中的文本文件中读取JSON数组