有没有大佬帮我改进算法,腾讯这次的第四题,但是超时了
#include <iostream>
using namespace std;
#include<vector>
#include<bitset>
vector<int>res;
vector<vector<int>>path;
// int fun(int a,int b)
// {
// int c;
// c=a^b;
// return c;
// }
int getint(vector<vector<int>>path)
{
int sum = 0;
int n = path.size();
int res1 = 0;
vector<int>r;
for (int i = 0; i < n; i++)
{
int m = path[i].size();
for (int j = 0; j < m; j++)
{
sum = sum ^ path[i][j];
}
res1 += sum;
sum = 0;
}
// for(int k=0;k<n;k++)
// {
// res1+=r[k];
// }
return res1;
}
void backtracking(vector<int>& v, int k, int index, int sum)
{
if (sum == k)
{
vector<int>s;
for (int j = index; j < v.size(); j++)
{
s.push_back(v[j]);
}
path.push_back(s);
int b = getint(path);
//cout<<path.size()<<endl;
path.pop_back();
res.push_back(b);
return;
}
for (int i = index; i < v.size(); i++)
{
vector<int>s;
for (int j = index; j <= i; j++)
{
s.push_back(v[j]);
}
path.push_back(s);
sum = sum + 1;
backtracking(v, k, i + 1, sum);
path.pop_back();
sum = sum - 1;
}
}
int main() {
int n, k;
cin >> n >> k;
vector<int>v;
int a;
for (int i = 0; i < n; i++)
{
cin >> a;
v.push_back(a);
}
backtracking(v, k, 0, 1);
int m = res.size();
int result = 0;
for (int i = 0; i < m; i++)
{
result = max(result, res[i]);
}
cout << result;
}