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;
    }

  • 相关阅读:
    Tomcat 调优的技巧
    双亲委派模型
    字典树实现
    Python获取房价信息和导出EXCEL
    日志检索关键字并截取上下行关联内容
    GC日志分析
    Linux 查看 删除进程
    Rotate partitions in DB2 on z
    C++ STL string
    DB2 for z: system catalog tables
  • 原文地址:https://www.cnblogs.com/kiuhghcsc/p/5843550.html
Copyright © 2011-2022 走看看