UVA10003CuttingSticks

xiaoxiao2021-02-28  162

//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; } /* 100 3 25 50 75 10 4 4 5 7 8 0 */
转载请注明原文地址: https://www.6miu.com/read-18555.html

最新回复(0)