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

    题目大意:将一段长为L的木棒在给定的n个切割点切开,每切一次的花费等于当前木棒的长度。求切成n+1段的最小花费。

    题目分析:区间DP。定义dp(i,j)表示切割区间i~j的花费,则 f(i,j)=min(f(i,k)+f(k,j))+dist(i,j)。时间复杂度为n3

    代码如下:

    # include<iostream>
    # include<cstdio>
    # include<cstring>
    # include<algorithm>
    using namespace std;
    const int INF=100000000;
    int a[55],dp[55][55],n;
    void DP()
    {
        for(int l=0;l<=n+1;++l){
            for(int i=0;i+l<=n+1;++i){
                int r=i+l;
                dp[i][r]=INF;
                if(l==0)///l为0说明现在是第一刀。
                    dp[i][r]=a[n+1]-a[0];
                if(l==1)///l为1说明现在不用切割。
                    dp[i][r]=0;
                for(int k=i+1;k<r;++k)
                    dp[i][r]=min(dp[i][r],dp[i][k]+dp[k][r]+a[r]-a[i]);
            }
        }
    }
    int main()
    {
        int l;
        while(scanf("%d",&l)&&l)
        {
            scanf("%d",&n);
            a[0]=0;
            for(int i=1;i<=n;++i)
                scanf("%d",a+i);
            a[n+1]=l;
            sort(a,a+n+2);
            DP();
            printf("The minimum cutting is %d.
    ",dp[0][n+1]);
        }
        return 0;
    }
    

      

  • 相关阅读:
    设计模式之四 代理模式
    设计模式之四 建造者模式
    设计模式之三 模板模式
    设计模式之二 工厂模式
    如何使用Json-lib
    Java LoggingAPI 使用方法
    设计模式之一 单例模式
    Scrapy教程
    Scrapy简介
    Scrapy安装向导
  • 原文地址:https://www.cnblogs.com/20143605--pcx/p/4790077.html
Copyright © 2011-2022 走看看