• UVa1003-Cutting sticks


    试题描述

    将一段木棒按要求切割,每次切割都要付出与木棒长度相同的代价,求最小代价切割。
    (多组数据)
    输入描述
    长度L。
    切割点数n(n<=50)。
    n个切割点。
    输出描述
    "The minimum cutting is " + ans +"."
    输入样例

    100
    3
    25 50 75
    10
    4
    4 5 7 8
    0
     输出样例


    The minimum cutting is 200.
    The minimum cutting is 22.


    简单DP

    f[i][j] = min{f[i][k] + f[k][j] + a[j] - a[i] }

    code:

    #include <stdio.h>
    #include <string.h>
    #define INF 0xfffffff
    int a[55];
    int L, n;
    int f[55][55];
    int main()
    {
        int i, j, c, k;
        int tmp;
        while(scanf("%d",&L),L)
        {
            scanf("%d",&n);
            for(i=1; i<=n; i++)
                scanf("%d",&a[i]);
            a[0] = 0; a[++n] = L;
            memset(f,0,sizeof(f));
    
            for(c=2; c<=n; c++)
            for(i=0;i<=n-c; i++)
            {
                j = i+c;
                tmp = INF;
                for(k=i+1;k<j;k++)
                if(tmp>f[i][k]+f[k][j]+a[j]-a[i])
                    tmp = f[i][k]+f[k][j]+a[j]-a[i];
                f[i][j] = tmp;
            }
            printf("The minimum cutting is %d.
    ",f[0][n]);
        }
        return 0;
    }
    


  • 相关阅读:
    Retrofit2.0+OkHttp打印Request URL(请求地址参数)
    Java如何从HttpServletRequest中读取HTTP请求的body
    解决gradle:download特别慢的问题
    20180531
    20180531 运算符重载
    20180531 二叉树
    20180530
    20180529-2
    20180529-1
    20180529
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3170480.html
Copyright © 2020-2023  润新知