zoukankan      html  css  js  c++  java
  • AcWing 282. 石子合并 区间dp

    #include <iostream>
    #include <algorithm>
    using namespace std;
    const int N = 310;
    int n;
    int s[N];//前缀和
    int f[N][N];//状态
    int main() {
        scanf("%d", &n);
        for (int i = 1; i <= n; i ++ ) scanf("%d", &s[i]);
        for (int i = 1; i <= n; i ++ ) s[i] += s[i - 1];
        //如果区间长度为1,那么合并的代价就为0,所以不用考虑,直接从2开始
        for (int len = 2; len <= n; len ++ )//枚举区间长度
            for (int i = 1; i + len - 1 <= n; i ++ ) { //枚举区间起点
                int l = i, r = i + len - 1;//左右端点
                f[l][r] = 1e8;//初始化
                for (int k = l; k < r; k ++ )//枚举分界点
                    f[l][r] = min(f[l][r], f[l][k] + f[k + 1][r] + s[r] - s[l - 1]);
            }
        printf("%d
    ", f[1][n]);
        return 0;
    }

     

  • 相关阅读:
    守护线程
    接口中的方法重写
    jvm内存结构
    浅拷贝,深拷贝
    队列
    12月4号荒度了一天
    同步条件
    条件变量
    信号量Semaphore
    sql练习
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/11886729.html
Copyright © 2011-2022 走看看