UVa 10003 Cutting Sticks

来源:互联网 发布:php curl跨域 编辑:程序博客网 时间:2024/06/05 05:18
#include <cstring>#include <cstdio>#include <algorithm>using namespace std;const int INF = 1<<30;const int MAXN = 55;int A[MAXN];int l, n;int d[MAXN][MAXN];//状态转移方程: d[i][j] = min( d[i][k] + d[k][j] ) +  LEN(i,j)void dp(){    for(int l=1; l<=n; l++) {        for(int i=0; i<=n-l; i++) {            int j = i+l;            if(l == 1) {d[i][j] = 0; continue;}            d[i][j] = INF;            int& minv = d[i][j];            for(int k=i+1; k<j; k++) {                if(d[i][k] + d[k][j] < minv) {                    minv = d[i][k] + d[k][j];                }            }            minv += A[j] - A[i];        }    }    printf("The minimum cutting is %d.\n", d[0][n]);}int main(){    #ifndef ONLINE_JUDGE    freopen("in.txt", "r", stdin);    #endif    A[0] = 0;    while(scanf("%d%d", &l, &n) == 2) {        A[++n] = l;        for(int i=1; i<n; i++) {            scanf("%d", &A[i]);        }        dp();    }    return 0;}

原创粉丝点击