小强有一个长度为n的整数数组a和一个数字m,他要在数组a中选择一个子序列,使得这个子序列的和相对m取模后的结果最大,子序列可以为空,请问这个结果最大为多少
/*
input:
第一行 两个正整数n, m
第二行 n个正整数a1,a2,a3,...,an
1 <= n <= 35, 1 <= m <= 1000000000, 1 <= ai <= 1000000000
output:
输出一行一个整数,代表答案
*/
#include <iostream>
#include <vector>
using namespace std;
void getSubseq(int index, vector<int>& arr, vector<vector<int>>& combineArr, vector<int> arr2) {
if (index >= arr.size()) {
combineArr.push_back(arr2);
return;
}
getSubseq(index + 1, arr, combineArr, arr2);
arr2.push_back(arr.at(index));
getSubseq(index + 1, arr, combineArr, arr2);
}
int getMaxModulo(vector<vector<int>>& combineArr, int m) {
int max = 0;
for (vector<int>& e : combineArr) {
if (e.empty()) {
continue;
}
long long sum = 0;
for (int i : e) {
sum += i;
}
max = max >= (sum % m) ? max : (sum % m);
}
return max;
}
int main() {
int n = 1;
int m = 1;
cin >> n >> m;
vector<int> inputArr;
for (int i = 0; i < n; i++) {
int value = 0;
cin >> value;
inputArr.push_back(value);
}
vector<vector<int>> combineArr;
getSubseq(0, inputArr, combineArr, vector<int>());
cout << getMaxModulo(combineArr, m) << endl;
system("pause");
return 0;
}
如有侵权,请联系删除,如有错误,欢迎大家指正,谢谢