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;}