求最大平方和,以及构成最大平方和的子序列:
注:本题每一个数只能使用一次。
输入:
4 2 6
2 3 3 4
输出 :
2 4
20
#include <iostream>
#include <vector>
/*输入数据
4 2 6
2 3 3 4
*/
using namespace std;
vector<int>temp, ans;
int a[10010];
int n, k, x;
int maxn = 0;
void dfs(int index, int num, int sum, int sum2) {
if (sum == x && num == k) {//和相等,数字个数相同
if (sum2>maxn) {
maxn = sum2;
ans = temp;
}
return;
}
if (index==n || sum > x || num > k) {//超出和的范围,数字的范围,或者是搜索到了最后一个
return;
}
temp.push_back(a[index]);//弹出
dfs(index + 1, num + 1, sum + a[index], sum2 + a[index] * a[index]);//加上这一个数
temp.pop_back();//回溯
dfs(index + 1, num, sum, sum2);//不加这一个数
}
int main()
{
cin >> n >> k >> x;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
dfs(0, 0, 0, 0);
for (vector<int>::iterator it = ans.begin(); it < ans.end(); it++) {//迭代器的经典使用方法
cout << *it << " ";
}
cout << endl;
cout << maxn;//输出最大平方和
}
注意迭代器的使用,以及vector之间的转换与赋值,
更改一下题目:每个数字可以使用多次,就是将dfs的代码改为:
dfs(index, num + 1, sum + a[index], sum2 + a[index] * a[index]);
继续更新中......