UVA10003CuttingSticks

来源:互联网 发布:记录恋爱的软件 编辑:程序博客网 时间:2024/06/05 20:31
//UVA10003 Cutting Sticks#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAXN = 50 + 5;int len, n;int a[MAXN], vis[MAXN][MAXN];int d[MAXN][MAXN];int dp(int i, int j) {if(j - i <= 1) return 0;if(vis[i][j]) return d[i][j];vis[i][j] = 1;    int& ans = d[i][j];    ans = -1;    for(int k = i + 1; k <= j - 1; k++) {    int v = dp(i, k) + dp(k, j) + a[j] - a[i];    if(ans == -1 || v < ans) ans = v;}return ans;}int main() {while(scanf("%d", &len) == 1 && len) {scanf("%d", &n);memset(vis, 0, sizeof(vis));a[0] = 0; a[n + 1] = len;for(int i = 1; i <= n; i++) scanf("%d", &a[i]);printf("The minimum cutting is %d.\n", dp(0, n + 1));}return 0;}/*100325 50 751044 5 7 80*/