reparación de 38 bullpen

38  reparación bullpen

Autor:  xxx Plazo:  1S secciones:  matriz unidimensional

Descripción del problema:

En una noche de tormenta, Farmer John techo del bullpen, la puerta estaba impresionado. Afortunadamente, muchas de ganado están de vacaciones, por lo que el bullpen ( establo del número total de S: 1 <= S <= 200) no han vivido. El ganado restantes empujones otra se colocó en el techo forrado bullpen de la noche. Así que algunos de la vaca una vaca, algunos no lo hacen.

Establo todas tienen la misma anchura, y la anchura se establece en 1. Debido a que algunas puertas que faltan, Farmer John necesario configurar un nuevo tablero como puerta. Sus nuevos proveedores de madera suministrándole cualquier longitud que quiera, pero sólo puede proporcionar un número limitado de proveedores de madera. Farmer John quiere comprar su madera para minimizar la longitud total.

 

El cálculo de la longitud total de la mínima requerida para detener todas las placas de un establo de vacas.

longitud total mínima de la tarjeta de salida como respuesta deseada.

 

Descripción: una longitud de la tabla dejado necesario para una vaca, la vaca se detuvo tres tablones adyacentes longitud de 3 requeridas.

Por ejemplo, hay vacas número establo:

3 5 8 10 11

Y sólo puede utilizar dos piezas de madera,

La primera pieza de madera de 3 a 5, una longitud de 3,

La segunda viga de 8 a 11, una longitud de 4,

Así, la longitud total requerida para la junta 7.

 

 

Introduzca una descripción:

Línea 1: M y C (separados por espacios)

C + 1 a la segunda línea: Cada fila contiene un número entero que indica el número de ganado granero ocupados.

 

donde:

Puede ser disponible comercialmente número máximo de madera de malla: M (1 <= M < = 50);

Bovina dispuesta número requerido C (1 <= C <= S)

Después de la colocación del establo donde número vacas stall_number (. 1 <= stall_number <= S) .

 

Descripción Salida:

Se compone de un único entero línea requiere longitud total mínima de la plancha

Ejemplo de entrada:

3 5
2
4
6
8
7

Resultado de muestra:

5

 

Ideas para resolver problemas :( codiciosos). A partir ni idea, o que no son malas ideas. el funcionamiento índice de violencia en la matriz, sensación de confusión. Habitualmente abierto tabla de Excel, mira el número de pinturas Fotos,

Ver lo que la ley no. En ambos casos sigue :()

 

 Por lo tanto existe la idea, asume con una tabla larga, una sola vez bloqueado todas las puertas. Es fácil calcular la longitud necesaria de la madera. Luego encontramos entre algunas bullpen

Hay una gran brecha, es una madera de desecho. Estas estadísticas fuera de intervalo, objeto de la solicitud de acuerdo con (un máximo de m se define utilizando la madera, es decir, eliminan hasta m-1 intervalos), codicioso

Regla, de primer orden descendente de intervalos, cada intervalo de la primera gran inconveniente, se puede obtener una solución global óptima.

 

código completo:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <math.h>
 4 #include <string.h>
 5 #include <ctype.h>
 6 
 7 #define MAXNUM 205
 8 
 9 int rec[MAXNUM] = {0};
10 int interval[MAXNUM] ={0};
11 void mySort(int num[],int len);
12 
13 int main(){
14 
15     int m,c,i,j,n,temp;
16     scanf("%d %d",&m,&c);
17     for(i=0;i<c;i++){
18         scanf("%d",rec+i);
19     }
20     int len = c;
21     //牛棚编号排序
22     mySort(rec,len);
23 
24     int max = rec[len-1] - rec[0] + 1;
25     //最多找到m-1个距离不小于1的间隔,记录找到的间隔并排序
26     int len2=0;//记录数组的长度
27     for(i=1;i<len;i++){
28         temp = rec[i] - rec[i-1]-1;
29         if(temp>0){
30             interval[len2++] = temp;    
31         }
32     }
33     //对间间隔数组排序,排序结果是从小到大,我们要逆序利用
34     
35     mySort(interval,len2);
36     //printf("max= %d\n",max);
37     int count = m-1;//最多可以利用的间隔数
38     //计算最终结果
39     for(i=len2-1;i>=0&&count!=0;i--,count--){
40         max = max - interval[i];
41     }
42 
43     printf("%d\n",max);
44     return 0;
45 }
46 
47 void mySort(int num[],int len){
48     int temp,i,j;
49     for(i=len-2;i>=0;i--){
50         for(j=0;j<=i;j++){
51             if(num[j]>num[j+1]){
52                 temp = num[j];
53                 num[j] = num[j+1];
54                 num[j+1] = temp;
55             }
56         }
57     }
58 }

 

Supongo que te gusta

Origin www.cnblogs.com/ManOK/p/12527016.html
Recomendado
Clasificación