子序列和的模值

小强有一个长度为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;
}

如有侵权,请联系删除,如有错误,欢迎大家指正,谢谢

猜你喜欢

转载自blog.csdn.net/xiao_ma_nong_last/article/details/105734193