题目描述

和所有人一样,奶牛喜欢变化。它们正在设想新造型的牧场。奶牛建筑师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。

dp j k 表示一条边为j一条边为k

推出所有可能状态,检验该状态是否能构成三角形

能的话计算返回面积,否则返回-1;

注意ans初值设为-1

#include<cmath>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std; int a[];
int n,sum;
double dp[][];
double calc(int a,int b,int c)
{
if(c==||a+b<=c||b+c<=a||a+c<=b)return -;
double len=(a+b+c)/2.0;
return (double)*sqrt(len*(len-a)*(len-b)*(len-c));
}
int main()
{
int n;scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",a+i),sum+=a[i];
double ans=-1.0;
dp[][]=;
for(int i=;i<=n;i++)
{
for(int j=sum;j>=;j--)
for(int k=sum;k>=;k--)
{
if(j>=a[i])
if(dp[j-a[i]][k])dp[j][k]=;
if(k>=a[i])
if(dp[j][k-a[i]])dp[j][k]=;
if(i==n&&j&&k&&dp[j][k])
ans=max(ans,calc(j,k,sum-j-k));
}
}
printf("%d\n",int(ans));
return ;
}

最新文章

  1. JMeter--一、安装JMeter
  2. 摇一摇js 实现
  3. [PCL]点云渐进形态学滤波
  4. 运行编译后的程序报错 error while loading shared libraries: lib*.so: cannot open shared object file: No such file or directory
  5. cellspacing与cellpadding
  6. Tutorial: Model
  7. CodeForces 721B
  8. Web worker 与JS中异步编程的对比
  9. 利用LinkedList生成一副扑克牌
  10. git命令 高级
  11. Virtualbox开机启动,service命令管理
  12. 安全之路 —— 使用Windows全局钩子打造键盘记录器
  13. scipy.stats
  14. Apex计划作业框架的实现
  15. is interest important?
  16. CSS 点击事件
  17. Linux下查看系统启动 、运行以及安装时间
  18. vs中nuget命令的用法
  19. iOS 9应用开发教程之ios9的视图
  20. Spring(一)之概括与架构

热门文章

  1. python-使用unittest和ddt实现数据驱动
  2. pycharm安装scipy,安装失败
  3. Oracle 监听/数据库 启动/关闭
  4. STL之set&amp;multiset使用简介
  5. 爬虫:Scrapy11 - Logging
  6. 【bzoj5015】[Snoi2017]礼物 矩阵乘法
  7. 【bzoj1899】[Zjoi2004]Lunch 午餐 dp
  8. P1270 “访问”美术馆
  9. Java不需要加载整张图片而获取图片的大小
  10. java IO的字节流和字符流及其区别