zoukankan      html  css  js  c++  java
  • [codevs1048]石子归并 区间dp经典

    初始化:f[i][i]置成i,其余为0

    三重循环用f[i][j]+f[k][k]更新f[i][j]

    最后用一个三重循环更新ans数组,记得提前置成最大值

    var
            w:array[0..105]of longint;
            f,sum:array[0..105,0..105]of longint;
            i,n,j,x,y,k:longint;
    
            function min(x,y:longint):longint;
            begin
                    if x>y then exit(y) else exit(x);
            end;
    
    
            begin
                    readln(n);
                    for i:=1 to n do
                    read(w[i]);
                    fillchar(sum,sizeof(sum),0);
                    fillchar(f,sizeof(f),0);
                    for i:=1 to n do
                    for j:=1 to n do
                    for k:=i to j do
                    inc(sum[i,j],w[k]);
    
    
                    for i:=n-1 downto 1 do
                    for j:=i+1 to n do
                    begin
                            f[i,j]:=maxlongint;
                            for k:=i to j do
                            f[i,j]:=min(f[i,j],f[i,k]+f[k+1,j]+sum[i,j])
                    end;
                    writeln(f[1,n])
            end.

     喜欢就收藏一下,vic私人qq:1064864324,加我一起讨论问题,一起进步^-^

  • 相关阅读:
    校验函数
    声明
    主程序(开始检查)
    活代码LINQ——09
    活代码LINQ——08
    活代码LINQ——07
    活代码LINQ——06
    活代码LINQ——05
    活代码LINQ——04
    活代码LINQ——03
  • 原文地址:https://www.cnblogs.com/victorslave/p/4817707.html
Copyright © 2011-2022 走看看