很容易想到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. [译]深入理解JVM

    深入理解JVM 原文链接:http://www.cubrid.org/blog/dev-platform/understanding-jvm-internals 每个使用Java的开发者都知道Java ...

  2. Spark Streaming揭秘 Day21 动态Batch size实现初探(下)

    Spark Streaming揭秘 Day21 动态Batch size实现初探(下) 接昨天的描述,今天继续解析动态Batch size调整的实现. 算法 动态调整采用了Fix-point迭代算法, ...

  3. Linux tar 解压缩命令

    tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个 ...

  4. Python urllib2多进程共享cookies

    如果想多个进程共享同一个cookies,不用每个进程都重新登录,可以就cookies保存到一个文件,然后多个进程直接共享一个锁来实现 1.一个进程登录完成后,把cookies保存到一个文件里面 sel ...

  5. WPF中的WebBrowser

    MainWindow.xaml.cs //新窗口事件 { Uri uri = new Uri(textBox_uri.Text); System.Windows.Forms.Integration.W ...

  6. 实现Linux select IO复用C/S服务器代码

    已在ubuntu 下验证可用 服务器端 #include<stdio.h>#include<unistd.h>#include<stdlib.h>#include& ...

  7. Js 处理将时间转换 “年-月-日”

    将时间  \/Date(1432828800000+0800)\/"  转换成:“年-月-日” //时间转换function ChangeDateFormat(val) {    if (v ...

  8. localStorage 便签功能实现

    之前利用localStorage写过手机便签应用,因为蛋疼的换了台三星的屌丝级手机,木 有了测试的工具,没能继续优化维护下去.而在网页上实现便签功能目前来说似乎没有太大 的意义,因为不论是 Firef ...

  9. jQuery的优点——(一)

    稍微学点js然后就用起jQuery,用久了,就好像自己都成高手了,想得少了,都觉得自己就是js高手了.哗啦啦的惭愧啊=.= 面试GY的时候,因为在简历上写着大大的会用jQuery快速开发原型页面,然后 ...

  10. PAT-乙级-1020. 月饼 (25)

    1020. 月饼 (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 月饼是中国人在中秋佳节时吃的一种传统食 ...