很容易想到dp,f[i,j,k]表示到第i根木棒所组成三条边中两条边长为j,k是否存在

之后找所有满足三角形形成条件的三条边,然后找最大;

但:

如果你朴素的写,很有可能超时,事实上,只要加一些常数优化,就能卡过去

 var a,s:array[..] of longint;
    f:array[..,..,..] of boolean;
    i,j,k,k1,k2,n,l:longint;
    ans,p,t:double;
begin
  readln(n);
  for i:= to n do
  begin
    readln(a[i]);
    s[i]:=s[i-]+a[i];
  end;
  f[,,]:=true;
  k1:=;
  k2:=;
  for i:= to n do
  begin
    k1:=k1 xor ;
    k2:=k2 xor ;
    for j:= to s[i] do
    begin
      l:=min(j,s[i]-j);
      for k:= to l do //常数优化1
      begin
        if j-a[i]>= then f[k2,j,k]:=f[k2,j,k] or f[k1,j-a[i],k];
        if k-a[i]>= then f[k2,j,k]:=f[k2,j,k] or f[k1,j,k-a[i]];
        if s[i]-j-k-a[i]>= then f[k2,j,k]:=f[k2,j,k] or f[k1,j,k];
      end;
    end;
  end;
  ans:=;
  for i:= to s[n]- do
    for j:=(s[n] shr )+-j to min(s[n]-j-,j) do   //常数优化2:满足三角形
      if f[k2,i,j] and (s[n]-i-j>) then
      begin
        k:=s[n]-i-j;
        if (j>=i+k) or (k>=i+j) or (i>=j+k) then continue;
        t:=(k+i+j)/;
        p:=sqrt(t*(t-i)*(t-j)*(t-k));
        ans:=max(ans,p);
      end;
  if ans= then writeln(-) else writeln(trunc(ans*));
end.

事实上在OI中,多加一些常数优化往往有意想不到的效果!

poj1948的更多相关文章

  1. POJ1948 Triangular Pastures

    POJ1948 Triangular Pastures #include <iostream> #include <cmath> using namespace std; ; ...

  2. OJ题目分类

    POJ题目分类 | POJ题目分类 | HDU题目分类 | ZOJ题目分类 | SOJ题目分类 | HOJ题目分类 | FOJ题目分类 | 模拟题: POJ1006 POJ1008 POJ1013 P ...

  3. poj 01背包

    首先我是按这篇文章来确定题目的. poj3624 Charm Bracelet 模板题 没有要求填满,所以初始化为0就行 #include<cstdio> #include<algo ...

  4. POJ之01背包系列

    poj3624 Charm Bracelet 模板题 没有要求填满,所以初始化为0就行 #include<cstdio> #include<iostream> using na ...

随机推荐

  1. php文件夹与文件目录操作函数

    在php中一些常用的文件夹/文件目录操作函数总结. php文件夹操作函数 string basename ( string path [, string suffix] ) 给出一个包含有指向一个文件 ...

  2. 从零学起PHP

    数据库连接conn.php <?php //第一步:链接数据库 $conn=@mysql_connect("localhost:3306","root", ...

  3. [转]JAVA布局模式:GridBagConstraints终极技巧

    最近正在 修改<公交线路查询系统>,做系统的时候都是用NULL布局,由于NULL布局调用windows系统的API,所以生成的程序无法在其他平台上应用,而 且如果控件的数量很多,管理起来也 ...

  4. SharedPreference.Editor的apply与commit方法不同之处

    定义: void apply boolean commit; 相同:二者都是提交修改的数据 手机里的文件存放在/data/data/<package_name>/shared_prefs ...

  5. Insist

    1.怎么自动截断文本? 如题,当数据库中的数据内容超出了要显示的长度时,如果不采取措施,会破坏页面的布局美观,所以可以采用自动截断文本,需要查看的时候再把其他的内容显示出来. 没截断的时候如下图: 再 ...

  6. Linux操作系统

    Linux操作系统 linux源码分析(三)-start_kernel 2016-10-26 11:01 by 轩脉刃, 146 阅读, 收藏, 编辑 前置:这里使用的linux版本是4.8,x86体 ...

  7. 关于mapreduce过程中出现的错误:Too many fetch-failures

    Reduce task启动后第一个阶段是shuffle,即向map端fetch数据.每次fetch都可能因为connect超时,read超时,checksum错误等原因而失败.Reduce task为 ...

  8. 一种高斯模糊渐变动画的实现-b

    关于高斯模糊的方式有很多种,但是如果需要模糊渐变,那么对这种高斯模糊算法的性能要求是比较高的,今天这里重点不讨论算法,只是提供一个动画实现的思路.动画效果如下: 高斯模糊渐变动画 //高斯模糊 -(U ...

  9. integer和double的比较.

    Integer douVal=20; double parseDouble = Double.parseDouble(douVal.toString()); System.out.println(pa ...

  10. 1040: [ZJOI2008]骑士 - BZOJ

    Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火 ...