您的位置:首页 > 其它

zoj 1196 Fast Food

2012-09-29 11:45 267 查看
zoj 1196 Fast Food

这道题就是个水题,经典动态规划: 石子合并

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int maxn=210;
const int inf=0x3fffffff;

typedef long long ll;
ll dp[40][maxn],w[maxn][maxn],d[maxn];

int main(int argc, char *argv[])
{
    int n,k,ca=1;
    while(scanf("%d%d",&n,&k)==2)
    {
        if(n==0&&k==0) break;
        for(int i=1;i<=n;i++) scanf("%lld",&d[i]);
        for(int i=1;i<=n;i++)
        for(int j=i;j<=n;j++)
        {
            w[i][j]=0;
            int mid=(i+j)/2;
            for(int r=i;r<=j;r++) w[i][j]+=abs(d[mid]-d[r]);
        }
        for(int i=1;i<=n;i++) dp[0][i]=inf;
        dp[0][0]=0;
        for(int i=1;i<=k;i++)
        for(int j=1;j<=n;j++)
        {
            dp[i][j]=inf;
            for(int r=1;r<=j;r++)
              dp[i][j]=min(dp[i][j],dp[i-1][r-1]+w[r][j]);
        }
        printf("Chain %d\nTotal distance sum = %lld\n\n",ca++,dp[k]
);
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: