uva 10003 Cutting Sticks

来源:互联网 发布:微信三级分销商城源码 编辑:程序博客网 时间:2024/06/05 19:17

题意:有根木头,长度l,对它切n刀,分别在c1,c2....cn位置。费用等于你当前切的木头的长度。问你最少的费用是多少。

定义dp(be,end)为从切点be到end的最少费用。

#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N=60;int a[N],map[N][N],dp(int,int);bool vis[N][N];int main(){    int n;    while(scanf("%d",&n)!=EOF)    {        if(n==0) break;        memset(a,0,sizeof(a));        memset(map,0,sizeof(map));        memset(vis,0,sizeof(vis));        int m;        scanf("%d",&m);        for(int i=1;i<=m;i++)        {            scanf("%d",&a[i]);        }        m++;        a[m]=n;        printf("The minimum cutting is %d.\n",dp(0,m));    }    return 0;}int dp(int be,int end){    if(vis[be][end]) return map[be][end];    else if(end-be==1) {vis[be][end]=1;return 0;}    {        int imin=1<<30;        for(int i=be+1;i<end;i++)        {            int temp=dp(be,i)+dp(i,end)+a[end]-a[be];            imin=min(imin,temp);        }        vis[be][end]=1;        map[be][end]=imin;        return imin;    }}


原创粉丝点击