[Dp lineal] C000_ Poner Apple

1. Título Descripción

Ponga M manzanas idénticas en N platos idénticos, y deje algunos platos vacíos ¿Cuántos puntos diferentes hay? (Indicado por K) 5,1,1 y 1,5,1 son el mismo método de división.

De entrada

La primera línea es el número de datos de prueba t (0 <= t <= 20). Cada línea a continuación contiene dos enteros M y N, separados por espacios. 1 <= M, N <= 10.

Salida

Para cada conjunto de datos de entrada M y N, use una línea para generar la K. correspondiente

样例输入
1
7 3
样例输出
8

En segundo lugar, la solución

Método uno: búsqueda aleatoria

Sea a la cantidad de manzanas yb sea la cantidad de canastas, como se detalla a continuación:

  • a = 1 || b == 1 Cuando:
    • Pon la única manzana en una canasta.
    • O ponga todas las manzanas en la única canasta.
  • b > a En ese momento, debe haber canastas de ba que estén vacías, estas canastas no afectan mi elección de ubicación, porque solo puedo dejar que una canasta tenga manzanas.
  • b <= a Cuando se puede dividir en dos situaciones:
    • a = b Cuando, de hecho, hay muchas opciones:
      • Deje la canasta vacía: pero para ser escasa y no perder, solo dejo una canasta a la vez a la vez.
      • Mantenga las canastas vacías: o cada canasta está llena.
    • b < a También hay dos opciones:
      • Deje la canasta vacía: pero para ser escasa y no perder, solo dejo una canasta a la vez a la vez.
      • Deje que la canasta no esté vacía, deje que las canastas b tengan una manzana cada una, y las manzanas ab restantes hagan otros planes.
import java.util.*;
import java.math.*;
import java.io.*;
public class Main{
	static boolean[] vis;
	static int res;
	
	private static int dfs(int a, int b) {
		if (a == 1 || b == 1)
			return 1;
		if (a == b) 
			return dfs(a, b-1) + 1;
		if (a < b)
			return dfs(a, a);
		if (a > b)
			return dfs(a, b-1) + dfs(a-b, b);
	}
    public static void main(String[] args) throws IOException {  
        Scanner sc = new Scanner(new BufferedInputStream(System.in));
        BufferedWriter w = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int t = sc.nextInt();
		while (t-- > 0) {
			int a = sc.nextInt();	//app
			int b = sc.nextInt();	//篮子
			System.out.println(dfs(a, b));
		}
    }
}

Análisis de complejidad.

  • Complejidad del tiempo: El ( ) O ()
  • Complejidad espacial: El ( ) O ()

Método 2: dp

Encargado de negocios ...


Análisis de complejidad.

  • Complejidad del tiempo: El ( ) O ()
  • Complejidad espacial: El ( ) O ()
Publicado 714 artículos originales · elogiado 199 · 50,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/qq_43539599/article/details/105619242
Recomendado
Clasificación