zoukankan      html  css  js  c++  java
  • BZOJ1600: [Usaco2008 Oct]建造栅栏

    1600: [Usaco2008 Oct]建造栅栏

    Time Limit: 5 Sec  Memory Limit: 64 MB
    Submit: 825  Solved: 473
    [Submit][Status]

    Description

    勤奋的Farmer John想要建造一个四面的栅栏来关住牛们。他有一块长为n(4<=n<=2500)的木板,他想把这块本板切成4块。这四块小木板可以是任何一个长度只要Farmer John能够把它们围成一个合理的四边形。他能够切出多少种不同的合理方案。注意: *只要大木板的切割点不同就当成是不同的方案(像全排列那样),不要担心另外的特殊情况,go ahead。 *栅栏的面积要大于0. *输出保证答案在longint范围内。 *整块木板都要用完。

    Input

    *第一行:一个数n

    Output

    *第一行:合理的方案总数

    Sample Input

    6

    Sample Output

    6


    输出详解:

    Farmer John能够切出所有的情况为: (1, 1, 1,3); (1, 1, 2, 2); (1, 1, 3, 1); (1, 2, 1, 2); (1, 2, 2, 1); (1, 3,1, 1);
    (2, 1, 1, 2); (2, 1, 2, 1); (2, 2, 1, 1); or (3, 1, 1, 1).
    下面四种 -- (1, 1, 1, 3), (1, 1, 3, 1), (1, 3, 1, 1), and (3,1, 1, 1) – 不能够组成一个四边形.

    HINT

     

    Source

    题解:
    总是想不到DP,是不是没救了。。。
    hzwer:

    用f[i][j]表示前i块木板长度和为j的方案

    构成四边形的条件是三边和大于第四边

    也就是任意一条边的长度都是小于边长之和的一半

    代码:

     1 uses math;
     2 var i,j,k,n,mx:longint;
     3     f:array[0..4,0..2510] of longint;
     4 begin
     5  assign(input,'input.txt');assign(output,'output.txt');
     6  reset(input);rewrite(output);
     7  readln(n);
     8  fillchar(f,sizeof(f),0);
     9  f[0,0]:=1;mx:=(n+1)>>1-1;
    10  for i:=1 to 4 do
    11   for j:=1 to n do
    12    for k:=1 to min(mx,j) do
    13     inc(f[i,j],f[i-1,j-k]);
    14  writeln(f[4,n]);
    15  close(input);close(output);
    16 end.      
    View Code
  • 相关阅读:
    从jvm的角度来看java的多线程
    jvm常用优化方案和方法
    JVM GC 机制与性能优化
    JVM 类加载机制详解
    (转)Java 详解 JVM 工作原理和流程
    Callable,Runnable异同
    使用Toast进行用户提醒(转)
    学好Java只需要做到这7点,年薪20W起步
    C# 之泛型详解
    C#中的委托和事件
  • 原文地址:https://www.cnblogs.com/zyfzyf/p/3905860.html
Copyright © 2011-2022 走看看