algorithm - 子集计数问题,如何调试解决方案不起作用的地方?
问题描述
所以我试图解决这个问题:
给定一个整数数组 arr[] 和一个整数和,任务是计算给定数组的所有子集,其总和等于给定总和。
注意:答案可能非常大,因此,输出答案模 10^9+7
现在这是我在这里尝试的解决方案:
class Solution{
private:
vector<vector<int>> t;
public:
Solution() {
t.resize(1001, vector<int> (1001,-1));
}
int perfectSum(int arr[], int n, int sum)
{
long long int result = fmod(sumrecursive(arr, n, sum),(pow(10,9)+7));
return result;
}
long long int sumrecursive(int arr[], int n, int sum){
if(sum==0){
return 1;
}
if(n==0){
return 0;
}
if(t[n][sum] != -1){
return t[n][sum];
}
if(arr[n-1]>sum){
return t[n][sum] = sumrecursive(arr, n-1, sum);
} else {
return t[n][sum] = sumrecursive(arr,n-1, sum-arr[n-1]) + sumrecursive(arr, n-1, sum);
}
}
};
现在此代码在某些输入后不起作用:
在这一点上,我不知道如何着手解决这个问题。理想情况下,根据我编写的代码,输入在代码的掌握范围内,输出应该是正确的,但不幸的是事实并非如此。我想问是否有人可以发现代码中的问题所在,或者指导我如何调试代码中的问题所在。
解决方案
您可能会在此过程中遇到整数溢出。
您只是在结束函数之前使用 mod,但是您的缓存是 type int
,所以当放置太大的数字时 - 由于溢出,您会丢失一些数据。
推荐阅读
- python - 如何在 Python3 中正确使用字典的集合键?
- python-3.8 - 错误:在 pip 21.1.2、python3.8 64bit 上找不到满足要求 tensorflow==2.4.1(来自版本:无)的版本
- c# - 使用 Linq 针对 Entity Framework 显示等效于 SQL 数据透视表
- sas - 使用宏和 proc 报告设置标题
- python-3.x - 有什么作用!在 Python 中是什么意思?
- python - 如何使用 TD Ameritrade api 使用 python 创建监视列表?
- python - gpflow 示例中的 2D 实现和获取 MAE、RMSE 错误
- c++ - 如果我们为 const integer 分配这样的值可以吗?
- python-3.x - 为什么我的 Pygame 窗口背景无法加载?
- python - 一种保护数据库中密码的简单方法