算法问题,求一组数中的随意和,最接近某个值

一组数据比如[5.5,7,3,8,34,5,1,2.2] ,求任意几个数的和,最接近但不超过50的算法,要能输出方案。

用递归来处理。


#include<bits/stdc++.h>
using namespace std;

int a[11];
int res,n;

void dfs(int k,int sum,int is)
{
    if(sum<=50 and is) res = max(res,sum);
    if(sum>50 or k==n+1) return;
    
    dfs(k+1,sum,is);
    dfs(k+1,sum+a[k],1);
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    dfs(0,0,0);
    cout<<res<<'\n';
    return  0;
 } 

使用递归的方法写,暴力搜索,相当于每个元素都有两种计算情况,要么不加它,要么加它,对应两个dfs。
k代表当前的访问数的个数,sum为当前访问到数的总和,is记录是否有数有加的运算。
我只是把其中的数变为了整数,并让用户读入几个数据。你可以根据需要进行改动。
如果有什么不懂得可以私我。