zoukankan      html  css  js  c++  java
  • CodeVS 1048 石子归并(区间DP)

    题目大意:

    http://codevs.cn/problem/1048/

    基本思路:

    dp[i][j]代表把i到j堆的堆在一起所需要的最小花费。dp[i][j] = min(dp[i][j],dp[i][k]+dp[k+1][j]+wi+....+wj)。

    代码:

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    
    using namespace std;
    
    int arr[110];
    int dp[110][110];
    int sum[110];
    const int INF=0x7fffffff;
    
    int main()
    {
        memset(arr,0,sizeof(arr));
        memset(sum,0,sizeof(sum));
    
        int n;
        cin >> n;
        for(int i = 1; i <= n; i++)
        {
            int tmp;
            cin >> tmp;
            arr[i] = tmp;
            sum[i] = sum[i-1]+tmp;
        }
    
        for(int i = 1; i <= n; i++)
        {
            for(int j = i -1; j >= 0; j--)
            {
                dp[j][i] = INF;
                for(int k = j; k < i; k++)
                {
                    dp[j][i] = min(dp[j][i], dp[j][k]+dp[k+1][i]+sum[i]-sum[j-1]);
                }
            }
        }
    
        cout << dp[1][n] << endl;
        return 0;
    }
    View Code
  • 相关阅读:
    阅读笔记
    学习小记
    networkx学习笔记
    ORM查询简化
    redis等缓存
    redis相关缓存知识
    Centos7网络配置
    redis安装详细
    redis安装详细
    mobaxterm使用手册
  • 原文地址:https://www.cnblogs.com/zyqBlog/p/7487270.html
Copyright © 2011-2022 走看看