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.