UVA 10003 Cutting Sticks 区间DP

来源:互联网 发布:金融行业的网络推广 编辑:程序博客网 时间:2024/05/16 11:09
#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.1415926535897932626using 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;}

0 0