您的位置:首页 > 其它

UVA 10003 Cutting Sticks 区间DP

2014-05-19 20:37 387 查看
#include <map>
#include <set>
#include <list>
#include <cmath>
#include<cctype>
#include <ctime>
#include <deque>
#include <stack>
#include <queue>
#include <cstdio>
#include <string>
#include <vector>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define PI 3.1415926535897932626
using namespace std;
int gcd(int a, int b)
{
return a % b == 0 ? b : gcd(b, a % b);
}
int dp[55][55];
int L;
int src[60];
int DP(int l,int r)
{
int &ans=dp[l][r];
if (ans!=-1) return ans;
if (r-1==l)  return ans=0;
ans=1e6;
for (int i=l+1;i<r;i++)
{
int tmp=DP(l,i)+DP(i,r)+src[r]-src[l];
if (tmp<ans)
ans=tmp;
}
return ans;
}
int main()
{
src[0]=0;
while (scanf("%d",&L)==1)
{
if (L==0) break;
memset(dp,-1,sizeof(dp));
int n;
scanf("%d",&n);
src[n+1]=L;
for (int i=1;i<=n;i++)
scanf("%d",&src[i]);
printf("The minimum cutting is %d.\n", DP(0, n+1));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: