zoukankan      html  css  js  c++  java
  • 1048 石子归并

    1048 石子归并

     

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 黄金 Gold
     

    题目描述 Description

    有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1]。问安排怎样的合并顺序,能够使得总合并代价达到最小。

    输入描述 Input Description

    第一行一个整数n(n<=100)

    第二行n个整数w1,w2...wn  (wi <= 100)

    输出描述 Output Description

    一个整数表示最小合并代价

    样例输入 Sample Input

    4

    4 1 1 4

    样例输出 Sample Output

    18

    入门合并类dp: 最朴素的算法即可 O(n^3) dp[i][j] 代表从 i 合并到 j 最小代价

     1 #include <iostream>
     2 using namespace std;
     3 
     4 #define MAXN 105
     5 #define INF 1e10
     6 
     7 int dp[MAXN][MAXN];
     8 int sum[MAXN];
     9 int buf[MAXN];
    10 
    11 int main()
    12 {
    13     int n;
    14     cin>>n;
    15     for (int i=0;i<n;i++)
    16     {
    17         cin>>buf[i];
    18         if (i==0)
    19             sum[i]=buf[i];
    20         else
    21             sum[i]=sum[i-1]+buf[i];
    22     }
    23     for (int i=1;i<n;i++)
    24     {
    25         for (int j=0;j<n-i;j++)
    26         {
    27             int e = j + i;
    28             dp[j][e]=INF;
    29             for (int k=j;k<e;k++)
    30                 dp[j][e]=min(dp[j][e],dp[j][k]+dp[k+1][e]+sum[e]-sum[j]+buf[j]);
    31         }
    32     }
    33     cout<<dp[0][n-1]<<endl;
    34     return 0;
    35 }
    View Code
  • 相关阅读:
    python基础五——初识函数
    python基础三——基础数据类型
    Python基础二
    python基础一
    2.配置jenkins
    1.jenkins 安装
    Java8 新特性
    Java8 新特性
    1.什么是 Docker
    idea快捷键
  • 原文地址:https://www.cnblogs.com/haoabcd2010/p/6698545.html
Copyright © 2011-2022 走看看