UVA 10003 Cutting Sticks

来源:互联网 发布:在淘宝上买苹果6可靠吗 编辑:程序博客网 时间:2024/06/16 15:34

点击打开链接

区间dp问题,搞清楚转移方程就好了,一段区间的最小值就是两段之和加上区间的长度。

#include<iostream>  #include<algorithm>#include<math.h>#include<string.h>#include<cstdio>#include<string>using namespace std;const int maxn = 60;int i, j, k, n, f[maxn][maxn], length, a[maxn];int main(){while (cin >> length, length){cin >> n; memset(f, 1, sizeof(f));for (a[0] = 0, a[n + 1] = length, i = 1; i <= n; i++) cin >> a[i];for (i = 0; i <= n; i++) f[i][i] = f[i][i + 1] = 0;for (j = 2; j <= n + 1;j++)for (i = 0; i + j <= n + 1; i++)for (k = 1; k < j; k++)f[i][i + j] = min(f[i][i + k] + f[i + k][i + j] + a[i + j] - a[i], f[i][i + j]);cout << "The minimum cutting is " << f[0][n + 1] << "." << endl;}return 0;}


0 0
原创粉丝点击