使用递归从子集和中查找最大和
Finding the maximum sum from the subset sum using recursion
我只想打印子集和的最大和。实际上,我想要的是比较函数中的所有子集和值,然后只返回主函数中的最大和。
我试图做的是将子集和值保存在一个新数组中。然后比较其中的值。但我没能做到这一点,因为它一无所获。我想假设输入array
的大小是n = 5
,要求和的元素数是r = 3
,数组是:
{1,2,3,4,5}
那么最大和应该是3 + 4 + 5 = 12
。但是我的代码返回所有的总和。
我想将和值保存在newArray 中
newArray[] = sum;
然后从newArray中找到最大值。
这是我的code
:
#include <stdio.h>
#include <iostream>
using namespace std;
void combinationRecursion(int start, int end, int index, int r, int *arr, int *data, int sum){
if(r == index){
for(int i=0; i<r; i++){
int val = data[i];
cout<<val<<' ';
sum = sum + data[i];
}
printf("sum %dn",sum);
printf("n");
}
for(int i=start; i<end; i++){
data[index] = arr[i];
combinationRecursion(i+1, end, index+1, r, arr, data, sum);
}
}
int main() {
int arr[100], n, data[100], r;
scanf("%d%d",&n,&r);
for(int i=0; i<n; i++) {
scanf("%d",&arr[i]);
}
combinationRecursion(0, n, 0, r, arr, data, 0);
}
如果您对基数为n
的集合外大小为k
的子集感兴趣,那么您不需要执行任何组合生成操作。您可以按递减顺序对数组进行排序,然后选择最前面的k
元素,因为它们按递减顺序排序,所以它们将给出大小为k
的子集的最大和。
我终于能够通过全局设置max来解决这个问题。这是经过修改的
int max1 = 0;
int combinationRecursion(int start, int end, int index, int r, int *arr, int *data){
if(r == index){
int sum = 0;
for(int i=0; i<r; i++){
int val = data[i];
sum = sum + data[i];
}
if(max1<sum){
max1 = sum;
}
}
for(int i=start; i<end; i++){
data[index] = arr[i];
combinationRecursion(i+1, end, index+1, r, arr, data);
}
return max1;
}
让我们看看是否可以使用std::算法(未经测试的代码(来完成。
std::partial_sum(data.begin(), data.end(), std::plus<int>);
std::vector<int> subSetSum;
subSetSum.reserve(data.size()); // -3 but meh.
std::transform(data.begin(), data.begin()+subSetLength-1, std::back_inserter(subSetSum), std::minus<int>); // will be negative
auto maxSum = -std::min_element(subSetSum.begin(), subSetSum.end());
但这里没有递归。。。
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 在C++中查找文件
- 模板元程序查找相似的连续类型名称
- 在UNIX系统中使用DIR查找文件的字节大小
- 查找最接近的大于当前数字的数字的索引
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 查找后更改类变量
- 使用正则表达式regex_search在字符串中查找字符串
- 使用gcc从静态链接的文件中查找可选符号
- 在C++中查找范围的长度
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 算法问题:查找从堆栈中弹出的所有序列
- 在Windows中查找扬声器输出的当前音量级别
- 在尝试使用递归查找集合子集的总数时,我遇到了分割错误
- 使用递归从子集和中查找最大和
- 如何查找子序列中等于总和的最大子集的大小
- 在查找子集中元素和元素数量之间的二进制比较背后的逻辑是什么?
- 使用递归查找所有可能的子集对
- 如何查找一个列表是否是另一个列表的子集
- 查找数组的子集数,这些子集加起来是特定数字的倍数