<pre name="code" class="cpp">#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
#define maxn 100000
int p[55],dp[55][55];
int main()
{
int L,n;
while(cin>>L&&L)
{
memset(dp,0,sizeof(dp));
cin>>n;
for(int i=1; i<=n; i++)
cin>>p[i];
p[0]=0,p[n+1]=L;
for(int l=2; l<=n+1; l++)
for(int i=0; i+l<=n+1; i++)
{
int j=i+l;
dp[i][j]=maxn;
for(int k=i; k<j; k++)
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+p[j]-p[i]);
}
cout<<"The minimum cutting is "<<dp[0][n+1]<<"."<<endl;
}
}
UVA 10003 Cutting sticks
最新推荐文章于 2020-10-22 19:49:29 发布
本文介绍了一个关于寻找木材等物品最小切割次数的问题解决方案,并通过动态规划算法实现。具体地,程序接收长度L和n个标记位置,计算并输出将物品按标记位置切割所需的最少切割次数。
2703

被折叠的 条评论
为什么被折叠?



