• 石子合并(一)


    石子合并(一)

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:3
     
    描述
        有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆。求出总的代价最小值。
     
    输入
    有多组测试数据,输入到文件结束。
    每组测试数据第一行有一个整数n,表示有n堆石子。
    接下来的一行有n(0< n <200)个数,分别表示这n堆石子的数目,用空格隔开
    输出
    输出总代价的最小值,占单独的一行
    样例输入
    3
    1 2 3
    7
    13 7 8 16 21 4 18
    样例输出
    9
    239
     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 const int INF = 0x3f3f3f3f;
     5 using namespace std;
     6 int a[205];
     7 int sum[205];
     8 int dp[205][205];
     9 int main(){
    10     int n;
    11     while(~scanf("%d", &n)){
    12         memset(dp, 0, sizeof(dp));
    13         for(int i = 1; i <= n; i++){
    14             scanf("%d", &a[i]);
    15             sum[i] = sum[i-1] + a[i];
    16         }
    17         for(int i = 1; i <= n; i++){
    18             for(int j = i-1; j >= 1; j--){
    19                 int tmp = INF;
    20                 for(int k = j+1; k <= i; k++){
    21                     tmp = min(tmp, dp[i][k]+dp[k-1][j]+sum[i]-sum[j-1]);
    22                 }
    23                 dp[i][j] = tmp;
    24             }
    25         }
    26         printf("%d
    ", dp[n][1]);
    27     }
    28     return 0;
    29 }
  • 相关阅读:
    expect
    grep
    Python函数
    Python的set
    Python字典
    Python循环
    Python条件判断
    Python列表
    Python字符串
    Python组织代码块的形式
  • 原文地址:https://www.cnblogs.com/ACMessi/p/4924615.html
Copyright © 2020-2023  润新知