zoukankan      html  css  js  c++  java
  • UVa 10003 Cutting Sticks(区间DP)

    题意:

    给定一个l长得木棍,要把它从给定的n个点截断,每截断一次需要的费用为木棍的长度。

    求截断这个木棍所要花费的最小代价。

    思路:

    典型的区间DP,要额外添加2个点:0和l,于是区间从1不断扩展到n+1,dp[i][j]代表点i到点j所要花费的最小代价。

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    
    #define min(a,b) (((a) < (b)) ? (a) : (b))
    
    const int INF = 1e9;
    int a[60];
    int dp[60][60];
    
    int main()
    {
        int l, n;
        while (scanf("%d", &l) && l)
        {
            scanf("%d", &n);
            for (int i = 1; i <= n; ++i)
                scanf("%d", &a[i]);
    
            a[0] = 0, a[n+1] = l;
            n += 1;
    
            memset(dp, 0, sizeof(dp));
    
            for (int i = 0; i <= n; ++i)
            {
                for (int j = 0; j <= n; ++j)
                    dp[i][j] = INF;
                dp[i][i] = 0;
            }
    
            for (int i = 0; i < n; ++i)
                dp[i][i+1] = 0;
    
            for (int p = 2; p <= n; ++p)
                for (int i = 0, j = p; j <= n; ++i, ++j)
                    for (int k = i; k < j; ++k)
                            dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j] + a[j] - a[i]);
    
            printf("The minimum cutting is %d.\n", dp[0][n]);
        }
        return 0;
    }

     

    -------------------------------------------------------

    kedebug

    Department of Computer Science and Engineering,

    Shanghai Jiao Tong University

    E-mail: kedebug0@gmail.com

    GitHub: http://github.com/kedebug

    -------------------------------------------------------

  • 相关阅读:
    JavaScript DOM 编程艺术 公用方法
    JavaScript DOM 编程艺术
    Echart 的formatter及重写line chart
    PHP 导出csv
    Linux 搭建PHP环境
    学习新思路
    fork产生子进程利用pipe管道通信
    进程间通信 管道
    进程间通信(IPC) 简介
    java 多态
  • 原文地址:https://www.cnblogs.com/kedebug/p/2765517.html
Copyright © 2011-2022 走看看