码迷,mamicode.com
首页 > 其他好文 > 详细

UVA 10003 - Cutting Sticks (区间DP)

时间:2015-03-10 17:17:44      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

题意:把一根木棍按给定的n个点切下去,每次切的花费为切的那段木棍的长度,求最小花费。

区间DP

POJ 3253-Fence Repair相似,POJ那题不是给定切割点,而是给定了需要切成的长度,所以可以用哈夫曼编码贪心做

//	Accepted	C++	0.112
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int len;
int dp[55][55];
int c[55];
int n;
int main()
{
    c[1]=0;
    while(scanf("%d",&len),len)
    {
        scanf("%d",&n);
        n+=2;
        for(int i=2;i<n;i++) scanf("%d",&c[i]);
        c[n]=len;
        for(int l=1;l<n;l++)
            for(int p=1;p+l<=n;p++)
                for(int k=p+1;k<l+p;k++)
                    dp[p][p+l]= k==p+1? dp[p][k]+dp[k][p+l]+c[p+l]-c[p] : min(dp[p][p+l],dp[k][p+l]+dp[p][k]+c[p+l]-c[p]);
        printf("The minimum cutting is %d.\n",dp[1][n]);

    }
    return 0;
}


UVA 10003 - Cutting Sticks (区间DP)

标签:

原文地址:http://blog.csdn.net/kalilili/article/details/44177353

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!