给定N个整数,从中选择k个数,使得这k个数之和恰好等于一个给定整数的值,取平方和最大的组。
输入:4 2 6
2 3 3 4
输出:2 4
#include <iostream>
#include <algorithm>
#include <cstring>
#include <map>
#include <cstdio>
#include <cmath>
#include <vector>
#include <queue>
using namespace std;
int k,n,c[100],x,maxsumpow=0;
vector<int> temp,ans;
void dfs(int index,int num,int sum,int sumpow)
{
if(sum==x&&num==k)
{
if(sumpow>maxsumpow)
{
maxsumpow=sumpow;
ans=temp;
}
}
if(index==n||num>k||sum>x)
{
return;
}
temp.push_back(c[index]);
dfs(index+1,num+1,sum+c[index],sumpow+c[index]*c[index]);//每个数只能使用一次
//dfs(index,num+1,sum+c[index],sumpow+c[index]*c[index]);//单个数可重复出现
temp.pop_back();
dfs(index+1,num,sum,sumpow);
}
int main()
{
cin>>n>>k>>x;
for(int i=0;i<n;i++)
cin>>c[i];
dfs(0,0,0,0);
for(int i=0;i<k;i++)
cout<<ans[i]<<' ';//注意行末空格,我偷懒没写
return 0;
}