zoukankan      html  css  js  c++  java
  • UVA 10003:Cutting Sticks 区间DP

    Cutting Sticks

    题目链接:

     

    题意:

    给出一根木棍,要在木棍上切n下,给出n个切的点的坐标,每次切会把木棍切成两段,需要花费这两段木棍的长度合,求切完这n下的最小花费。

    题解:

    把这n个点排序,设dp[i][j]为把区间[i,j]内的点都切了的最小花费,跑一边区间DP就好了

    代码

    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    const int N=55;
    const int inf=100000000;
    int dp[N][N];
    int mmin(int x,int y)
    {
      return x<y?x:y;
    }
    int a[N];
    void solve()
    {
      int len,n;
      while(~scanf("%d",&len)&&len)
      {
        scanf("%d",&n);
        a[1]=0,a[n+2]=len;
        for(int i=2;i<=n+1;++i)
          scanf("%d",&a[i]);
        sort(a+1,a+n+3);
        n+=2;
        for(int i=1;i<=n;++i)
        {
          for(int j=i+1;j<=n;++j)
          dp[i][j]=dp[j][i]=inf;
          dp[i][i]=dp[i][i+1]=0;
        }
        for(int l=0;l<=n;++l)
        for(int i=1;i+l<=n;++i)
        {
          int j=i+l;
          for(int k=i;k<=j;++k)
          {
            dp[i][j]=mmin(dp[i][j],dp[i][k]+dp[k][j]+a[j]-a[i]);
          }
        }
        printf("The minimum cutting is %d. ",dp[1][n]);
      }
    }
    int main()
    {
      solve();
      return 0;
    }

  • 相关阅读:
    02-css的选择器学习.html
    01-css-css的声明.html
    10-描点学习
    09-HTML-form标签学习.html
    08-HTML-框架标签学习.html
    07-HTML-内嵌标签学习.html
    06-HTML-表格标签学习.html
    05-HTML-超链接标签.html
    04-HTML-图片标签学习.html
    03-HTML-body标签(列表标签).html
  • 原文地址:https://www.cnblogs.com/kiuhghcsc/p/5843550.html
Copyright © 2011-2022 走看看