zoukankan      html  css  js  c++  java
  • BZOJ1197 [HNOI2006]花仙子的魔法

    其实是一道奇怪的DP题,蒟蒻又不会做。。。

    看了Vfk的题解才算弄明白是怎么一回事:

    令f[i, j]表示i维有j个球时最大切割部分,则

    f[i, j] = f[i, j - 1] + f[i - 1, j - 1]

    其中第一部分很好理解,就是前j - 1个球的最大个数,然后就是第二部分的理解:

    j - 1个球后再加一个球,于是最优的情况就是最后一个球与前j - 1个球都相交

    而求面试i - 1维的,相交出来的是i - 2维空间  <=> i - 1维空间用j - 1个i - 2个球划分的最优个数。

    证毕。。。

     1 /**************************************************************
     2     Problem: 1197
     3     User: rausen
     4     Language: Pascal
     5     Result: Accepted
     6     Time:0 ms
     7     Memory:264 kb
     8 ****************************************************************/
     9  
    10 var
    11   n, m : longint;
    12   f : array[0..20, 0..200] of int64;
    13   cal : array[0..20, 0..200] of boolean;
    14  
    15 procedure pre_work;
    16 var
    17   i, j : longint;
    18  
    19 begin
    20   for i := 1 to n do begin
    21     f[i, 1] := 2;
    22     cal[i, 1] := true;
    23   end;
    24   for j := 1 to m do begin
    25     f[1, j] := 2 * j;
    26     cal[1, j] := true;
    27   end;
    28 end;
    29  
    30 function calc(x, y : longint) : int64;
    31 begin
    32   if cal[x, y] then exit(f[x, y]);
    33   cal[x, y] := true;
    34   f[x, y] := calc(x - 1, y - 1) + calc(x, y - 1);
    35   exit(f[x, y]);
    36 end;
    37  
    38 begin
    39   readln(m, n);
    40   fillchar(cal, sizeof(cal), false);
    41   pre_work;
    42   writeln(calc(n, m));
    43 end.
    View Code

    (p.s. 程序是P的不要怪我>.<。。。是以前写的。。。!)

    By Xs酱~ 转载请说明 博客地址:http://www.cnblogs.com/rausen
  • 相关阅读:
    关于jquery
    3D转换(位置)+过渡+透视
    浅谈相对定位与绝对定位
    多层菜单
    菜单栏
    轮播图
    jsp中表格序号递增,varStatus="vs"
    关于数据库的增删改查
    put请求(单整体改),patch请求(群单改,群改)
    ModelSerializer 序列化和反序列化,及序列化整合,单删/增,群删/增(delete请求)
  • 原文地址:https://www.cnblogs.com/rausen/p/4060796.html
Copyright © 2011-2022 走看看