El diseño del programa de trabajo de pensar Week3- tema electoral número A-

A- número de cuestiones electorales

Descripción

Dado n enteros positivos, la suma de ellos seleccionar el número K es S, n los requisitos de entrada, K, S, salida de la cantidad de diferentes opciones.

Muestra

input:
1
10 3 10
1 2 3 4 5 6 7 8 9 10
output:
4

Idea

En primer lugar, he utilizado la lista para almacenar el número seleccionado, para facilitar la adición de elementos, eliminar elementos, también se puede saber el número de la hora seleccionada. Usando enumeración recursiva selectiva, para cada número de términos, y no se seleccionan seleccionarlo teniendo en cuenta su condición, cada elemento añadido a un valor correspondiente a la suma se resta, y cuando el número de la lista es igual a la suma exactamente igual a k 0, es decir, una solución calificado, mientras que cuando K excede el número de lista o no sumar atrás en el tiempo en este caso es de forma recursiva ha sido menor que cero.

Resumen

La idea básica se enumera, para toda la disposición, cada subconjunto a su vez determina si se cumplen los requisitos. Con el fin de reducir la complejidad, debe ser selectivamente Enumerar muchos casos, obviamente, skip no se establece, como un subconjunto del número de elementos excede K, y un subconjunto de elementos que S, se produce cuando la solución de nuevo cualificado en el tiempo, porque entonces adicionalmente elemento añadido recursiva debe también no es elegible.

códigos

#include <iostream>
#include <list>
using namespace std;
int a[16];
int t,n, k, s;
int amount = 0;
void solve(int i,int sum,list<int> &res) {
	if (res.size()==k&&sum == 0) { amount++; return; }
	if (i >= n)return;
	if (res.size()>k||sum < 0)return;

	solve(i + 1, sum,res);
	res.push_back(a[i]);
	solve(i + 1, sum - a[i],res);
	res.pop_back();

}

int main()
{
	cin >> t;
	while (t--)
	{
		amount = 0;
		scanf("%d%d%d", &n, &k, &s);
		memset(a, 0, sizeof(int));
		for (int i = 0; i < n; i++)
			cin >> a[i];
		list<int> r;
		solve(0, s, r);
		printf("%d\n", amount);

	}
}


Publicado 21 artículos originales · ganado elogios 5 · Vistas 786

Supongo que te gusta

Origin blog.csdn.net/weixin_44578615/article/details/104711472
Recomendado
Clasificación