Luo Gu P1164 - pequeña a la carta

Descripción Título - Una pequeña a la
UIM elemento de bolsillo M, N restaurantes verduras, primero yo yo tipo de venta a i ai Yuan ( a i ai ≤1000). Porque es muy restaurantes de gama baja, por lo que sólo una copia de cada verduras. Un poco de adhesión a la "no comer el dinero no se rinda", por lo que sólo tiene que poner un solo punto UIM todo su dinero de meta. El quería saber cuántos un enfoque a la carta.
El formato de entrada
de la primera fila son dos números representa N y M.
La segunda fila de la positivo N a i ai (Es posible que tenga los mismos números, cada uno son menos de 10.001 millones).
Formato de salida
un número entero positivo que representa el número de esquema de ordenamiento, la respuesta está garantizada dentro de la gama de int.
una muestra
. 4. 4
. 1. 1 2 2
de salida
3

Solución: 0-1 problema de la mochila

Permítanme hablar de dos dimensiones:

Definición de F [i] [j] es el j luz manera i antes de su uso de dólares para el número total de cursos, que la ecuación de transición de estado es el siguiente:

(1) si (j == i-ésimo precio del curso) f [i] [j] = f [i-1] [j] 1;

(I precio, por supuesto j>) (2) si f [i] [j] = f [i-1] [j] + f [i-1] [precio j- i-plato];

(3) si (j <i-ésimo precio del curso) f [i] [j] = f [i-1] [j];

Luego se reduce a una sola dimensión de optimización de gama basado en la complejidad espacial de la mochila

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int a[101], f[10001] = {0};
    int n, m;
    cin >> n >> m;
    for(int i=1;i<=n;i++)
    {
    	cin >> a[i];
	}
	f[0] = 1;
	for(int i=1;i<=n;i++)
	{
		for(int j=m;j>=a[i];j--)
		{
			f[j] = f[j] + f[j-a[i]];
		}
	}
	cout << f[m];
	
	return 0;
}
Publicados 152 artículos originales · ganado elogios 22 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/qq_38204302/article/details/105186697
Recomendado
Clasificación