Los solución a un problema Valley Ranch P1284 triángulo

Antes de hacer este problema primero debe entender la fórmula del área del triángulo: fórmula Helen .

Aquí conclusiones en escribir una escritura, es decir, por tres lados arbitrarias del triángulo \ (A, B, C \) , por lo que \ (X = \ tfrac {. 1} {2} (A + B + C) \) , entonces no es \ (S = \ sqrt {X (XA) (XB) (XC)} \) .

Siguiente consideramos el estado set, así que \ (f [k] [a ] [b] [c] \) representa la antigua \ (K \) º madera si rodeada tres lados de longitud \ (a, b, c \) triángulo. Sin embargo, la longitud del lado puede ser de hasta \ (800 \) , el tiempo y la complejidad del espacio \ (800 ^ 3 \ times 40 \) , que claramente no es factible.

Así que tratar de optimizar, se observa que el perímetro del triángulo es constante, entonces determinar las dos partes puedan encontrar el tercer lado. Set \ (C \) es el perímetro triangular, hacemos el \ (f [k] [a ] [b] \) representa la antigua \ (K \) º madera si rodeada tres lados de longitud \ (A, b, Cab \) triángulo.

Dirección de Transferencia de tres casos:

  • La sección \ (K \) º madera en \ (I \) Este lados:

    Entonces antes de su uso \ (k-1 \) º abordó los lados en longitud \ (ia [k] \) y \ (J \) triángulo, es decir, \ (f [k-1] [ia [k]] [j] \)

  • La sección \ (K \) º madera en \ (J \) Este lados: \ (F [. 1-K] [I] [JA [K]] \)

  • La sección \ (K \) º madera en el tercer lado: \ (F [. 1-K] [i] [j] \)

Hay ecuación de transferencia:

\ [F [k] [i] [j] = \ operatorname {max} (f [k-1] [i] [ja [k], f [k-1] [i] [ja [k]], f [k-1] [i] [j]) \]

En este punto seguimos a optimizar el espacio, fácil de encontrar y sólo cuando la transferencia \ (f [-1 k] [] [] \) relacionado, por lo que deshacerse de la unidimensional considerar la actualización del valor actual de la matriz con los datos originales \ (f [ I] [J] \) .

Cabe señalar que \ (i, j \) debe caer ciclo, porque queremos garantizar que \ (f [i] [ja [k]] \) y \ (f [ja [k] ] [i] \) valores son en el suelo, y \ (01 \) mochila similar.

Por último, para \ (f [i] [j ] = 1 \) un \ (I, J \) , se determinó \ ((i, j, Cij ) \) si el triángulo composición. Si se utiliza la composición para calcular la respuesta a la zona de Helen fórmula de actualización.

\ (\ Operatorname {Código:} \)

#include<bits/stdc++.h>
using namespace std;
const int N=45;
int n,sum,ans=-1,a[N],f[805][805];
bool check(int x,int y,int z) {
	if(x && y && z && x+y>z && y+z>x && x+z>y) return true;
	return false;
}
int hailen(double x,double y,double z) {
	double s=(x+y+z)/2;
	return sqrt(s*(s-x)*(s-y)*(s-z))*100;
}
int main() {
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]),sum=sum+a[i];
    f[0][0]=1;
    for(int k=1;k<=n;k++) {
    	for(int i=(sum>>1);i>=0;i--) {
	    	for(int j=(sum>>1);j>=0;j--) {
	    		if(i-a[k]>=0 && f[i-a[k]][j]) f[i][j]=1;
	    		if(j-a[k]>=0 && f[i][j-a[k]]) f[i][j]=1;
			}
		}
	}
	for(int i=0;i<=(sum>>1);i++) {
		for(int j=0;j<=(sum>>1);j++) {
		    if(f[i][j] && check(i,j,sum-i-j)) ans=max(ans,hailen(i,j,sum-i-j));
		}
	}
	printf("%d\n",ans);
	return 0;
}

Supongo que te gusta

Origin www.cnblogs.com/Agonim/p/12582842.html
Recomendado
Clasificación