| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
why wa//pku 1948 Triangular Pastures
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
bool use[40][1000][1000] = {false};
int segment[40];
float half;
double getarea(int a,int b,int c)
{
return (half * (half - a) * (half - b )* (half -c));
}
main()
{
int sum = 0;
int n;
int i,j,k;
int third;
int min = 100;
scanf("%d",&n);
for(i = 0 ; i < n ; i++)
{
scanf("%d",&segment[i]);
sum += segment[i];
// if(min > segment[i]) min = segment[i];
}
half = float(sum/2.0) ;
use[0][segment[0]][0] = true;
use[0][0][segment[0]] = true;
int flag ;
for(k = 1 ; k< n ; k++)
{
flag = 0;
// printf("------------------------------------\n");
// printf("%d \n",k);
for(i = 0; i<= half; i++)
{
for(j = 0; j<=half; j++)
{
if(use[k-1][i][j])
{
flag = 1;
use[k][i][j] = true;
if(i+segment[k]<=half)
use[k][i+segment[k]][j] = true;
if(j+segment[k]<=half)
use[k][i][j+segment[k]] = true;
// printf("%d ,%d : %d %d\n",i+segment[k],j,i,j+segment[k]);
}
}
}
// if(flag == 0)
// flag = 0;
}
double max = -1;
double area;
for(i = 0 ; i<=half; i++)
{
for(j = 0 ; j<=half ; j++)
{
if(use[n-1][i][j])
{
third = sum - i - j;
if(third >=i+j )
continue;
if(i>=j+third)
continue;
if(j >= i+third)
continue;
area = getarea(i,j,third);
// printf("area %d \n",area);
if(area > max)
{
max = area;
}
}
// if(use[n-1][i][j])
// printf("%d %d \n",i,j);
}
}
max = sqrt(max) * 100;
// cout<<(int)(max*100)<<endl;
printf("%I64d\n",(__int64)(max));
// cout<<area
return 1;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator