Uva-10003-Cutting Sticks

来源:互联网 发布:glide源码详解 编辑:程序博客网 时间:2024/05/16 17:54

简单的DP,类似矩形相乘最小次数

代码:

#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int inf=1<<29;const int maxn=55;int l,n,a[maxn],dp[maxn][maxn];int main(){    while(scanf("%d",&l)&&l)    {        memset(dp,0,sizeof(dp));        scanf("%d",&n);        a[0]=0;        for(int i=1;i<=n;i++)            scanf("%d",&a[i]);        a[++n]=l;        for(int j=2;j<=n;j++)            for(int i=0;i+j<=n;i++)            {                dp[i][i+j]=inf;                for(int k=1;k<j;k++)                    dp[i][i+j]=min(dp[i][i+j],dp[i][i+k]+dp[i+k][i+j]+a[i+j]-a[i]);            }        printf("The minimum cutting is %d.\n",dp[0][n]);    }    return 0;}


0 0
原创粉丝点击