[Día 1 de las elecciones de la ciudad de Guangzhou 2014] Intercepción de misiles [Solución del pequeño problema de Konjak]

Descripción

Cierto país desarrolló un sistema de interceptación de misiles V1.0 para defenderse de los ataques con misiles enemigos. Sin embargo, este sistema de interceptación de misiles tiene un defecto: aunque su primer proyectil puede alcanzar cualquier altura, cada proyectil posterior no puede ser más alto que el anterior, lo que reducirá en gran medida la tasa de interceptación del misil.
Luego de la minuciosa mejora del personal técnico, se actualizó el sistema de interceptación de misiles a la V2.0, lo que permitió que este sistema de interceptación tuviera varias oportunidades de elevarse a cualquier altura durante el proceso de interceptación. Aunque el número de veces es limitado, se ha considerado un gran mejora.
Un día, el radar captó un ataque con misiles enemigos y comenzó a llegar el momento de probar el sistema de interceptación de misiles V2.0.

Entrada

La primera línea es un número entero N (0 <= N <= 20), M (1 <= M <= 50), N representa el número de veces que el sistema de interceptación de misiles puede elevarse a cualquier altura durante el proceso de interceptación; M representa el misil que necesita ser interceptado Número de. Los dos números enteros N y M están separados por espacios.
La segunda línea es M números enteros positivos, y cada número entero está separado por un número de espacios para indicar la altitud de los misiles por turno. Los datos de altitud dados por el radar son un número entero positivo no mayor que 1000.

Salida

Emite un número entero positivo, que representa el número máximo de misiles que el sistema de interceptación de misiles puede interceptar.

Entrada de muestra

1
7300250275252200138245

Salida de muestra

6

análisis

Sabes que es DP a primera vista, ¿verdad?

Luego establecemos f [i] [j] f [i] [j]f [ i ] [ j ] significaiiYo misiles usadosjjj posibilidades de recuperación.

Entonces la ecuación de transferencia dinámica está lista para salir:

f [i] [k] = max (f [i] [k], f [j] [k] + 1) f [i] [k] = max (f [i] [k], f [j] [k] +1) f [ i ] [ k ]=m a x ( f [ i ] [ k ] ,f [ j ] [ k ]+1 )

f [i] [k + 1] = max (f [i] [k + 1], f [j] [k] + 1) f [i] [k + 1] = max (f [i] [k +1], f [j] [k] +1) f [ i ] [ k+1 ]=m a x ( f [ i ] [ k+1 ] ,f [ j ] [ k ]+1 )

Aquí estamos i, j, ki, j, ki ,j ,k , respectivamente representan la enumeración aiii misil, el último misil interceptado fuejjj , en la intercepciónjjKk usado paramisiles jk oportunidades de recuperación.

Esta ecuación debería ser bastante simple y fácil de entender. . .

CÓDIGO

Código ~~~~~~~~~~~~~ ¡Feo!

//L.E.M.T专用水印
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,a[105],f[105][105],ans;
int main() {
    
    
	scanf("%d%d",&m ,&n);
	for (int i=1;i<=n;i++) scanf("%d",&a[i]);
	f[1][0]=1;	
	for (int i=2;i<=n;i++) {
    
    
		for (int j=1;j<=i-1;j++) {
    
    
			for (int k=0;k<=min(m,j-1);k++) {
    
    
				if (a[j]>=a[i]) f[i][k]=max(f[i][k],f[j][k]+1);
				else f[i][k]=max(f[i][k],f[j][k]);
				if (k<m) {
    
    
					f[i][k+1]=max(f[i][k+1],f[j][k]+1);
				}
			}
		}
	}
	ans=0;
	for (int i=0;i<=min(m,n-1);i++) ans=max(ans,f[n][i]);
	printf("%d",ans);
}

resolver.

Supongo que te gusta

Origin blog.csdn.net/qq_49972640/article/details/108548893
Recomendado
Clasificación