洛谷1284三角形牧场

题目描述

和所有人一样,奶牛喜欢变化。它们正在设想新造型的牧场。奶牛建筑师Hei想建造围有漂亮白色栅栏的三角形牧场。她拥有N(3≤N≤40)块木板,每块的长度Li(1≤Li≤40)都是整数,她想用所有的木板围成一个三角形使得牧场面积最大。

请帮助Hei小姐构造这样的牧场,并计算出这个最大牧场的面积。

输入输出格式

输入格式:

 

第1行:一个整数N

第2..N+1行:每行包含一个整数,即是木板长度。

 

输出格式:

 

仅一个整数:最大牧场面积乘以100然后舍尾的结果。如果无法构建,输出-1。

 

输入输出样例

输入样例#1: 复制
5
1
1
3
3
4
输出样例#1: 复制
692

说明

样例解释:692=舍尾后的(100×三角形面积),此三角形为等边三角形,边长为4。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cmath>
 4 #include<algorithm>
 5 using namespace std;
 6 int i,j,k,N,a[45],q,tot = 0;
 7 bool f[805][805];
 8 double ans = -1,an;
 9 double mainji(double i,double j,double k)
10 {
11     double p;
12     p = (i + j + k)  / 2;
13     return sqrt(p * (p -i) * (p - j) * (p - k));
14 }
15 int main()
16 {
17     scanf("%d",&N);
18     for(i = 1;i <= N;i++)
19     {
20         scanf("%d",&a[i]);
21         tot += a[i];
22     }
23     q = (tot + 1) / 2;
24     f[0][0] = true;
25     for(i = 1;i <= N;i++) //枚举每一块板子 
26     {
27         for(j = q;j >= 0;j--)//一条边的最大长度为q-1,因为两边之和大于第三边可证出来 
28         {
29             for(k = j;k >= 0;k--) //假设第二条边比第一条边小 
30             {
31                 if((j >= a[i] && f[j - a[i]][k] == true) || (k >= a[i] && f[j][k - a[i]] == true ))//判断放之前可不可能成立 
32                 {
33                     f[j][k] = true;//先判断是否能组成一条边为j一条边为k的木棒 
34                 }
35             }
36         }
37     }
38     for(i = q;i >= 1;i--)
39     {
40         for(j = i;j >= 1;j--)
41         {
42             k = tot - i - j; //确定第三条边的长度 
43             if(i + j > k && i + k > j && j + k > i && f[i][j] == true)//判断他是否是个三角形,并且判断i和j能不能摆出来 
44             {
45                 an = mainji(i,j,k);
46                 if(ans < an)
47                 ans = an;
48             }
49         }
50     }
51     if(ans == -1)
52     printf("-1");
53     else
54     printf("%d",(int)(ans * 100));
55     return 0;
56 }

**这道题我调了一个半小时,海伦公式那块最好写分函数,不写。我是过不去了,还有判断j >= a[i] && f[j - a[i]][k] == true) || (k >= a[i] && f[j][k - a[i]] == true这块注意前后顺序,否则容易RE

****最后对于他是一个背包题深感惊讶

猜你喜欢

转载自www.cnblogs.com/rax-/p/9894540.html
今日推荐