zoukankan      html  css  js  c++  java
  • 合并金子(区间dp)

    原题链接

    很久没做dp了,连一道裸地区间dp都没能第一时间想到,我可真是个臭弟弟......

    一开始是用的贪心吧,wa了一发。

    本题思路:区间dp的一般思路,先枚举区间长度,然后枚举区间头,然后枚举区间断点,很容易就能想到状态转移方程。

    自己关掉博客好好想想吧,区间dp应该是最简单的dp类型了。

    #include <iostream>
    using namespace std;
    
    const int maxn = 30 + 5, inf = 0x3f3f3f3f;
    
    int val[maxn], sum[maxn][maxn], dp[maxn][maxn];
    
    int n;
    
    int main() {
        cin >> n;
        for(int i = 1; i <= n; i ++) {
            cin >> val[i];
            sum[i][i] = val[i];
        }
        for(int i = 1; i <= n; i ++) {
            for(int j = i; j < n; j ++) {
                sum[i][j + 1] = sum[i][j] + val[j + 1];
            }
        }
        for(int len = 1; len < n; len ++) {
            for(int i = 1; i + len <= n; i ++) {
                int j = i + len;
                dp[i][j] = inf;
                for(int k = i; k <= j; k ++) {
                    dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j] + sum[i][j]);
                }
            }
        }
        cout << dp[1][n] << endl;
        return 0;
    }
  • 相关阅读:
    前端js(一)
    前端CSS
    前端HTML
    视图等
    Navicat使用
    查询语句
    SpringBoot不能直接访问templates下的静态资源
    Mybatis什么时候用${}
    thymeleaf使用restul风格URL
    SpringBoot使用PageHelper
  • 原文地址:https://www.cnblogs.com/bianjunting/p/12553762.html
Copyright © 2011-2022 走看看