您的位置:首页 > 其它

UVA 10003 Cutting Sticks

2015-02-17 20:52 357 查看
点击打开链接

区间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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: