现在的位置: 首页 > 综合 > 正文

UVa1003-Cutting sticks

2018年12月21日 ⁄ 综合 ⁄ 共 648字 ⁄ 字号 评论关闭

试题描述

将一段木棒按要求切割,每次切割都要付出与木棒长度相同的代价,求最小代价切割。
(多组数据)
输入描述
长度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.\n",f[0][n]);
    }
    return 0;
}

抱歉!评论已关闭.