栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 1485 Fast Food

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 1485 Fast Food

#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;const int INF=100000000;int r[300],sum[300][40],one[300][300];int from[300][40],to[300][40],at[300][40];int output(int i,int j){    if(j<=0||i<=0)return 1;    int num=output(from[i][j]-1,j-1);    printf("Depot %d at restaurant %d serves ",num,at[i][j]);    if(from[i][j]==to[i][j])printf("restaurant %dn",from[i][j]);    else printf("restaurants %d to %dn",from[i][j],to[i][j]);    return num+1;}    int main(){    int n,K,i,j,k,middle;    int iCase=0;    while(scanf("%d%d",&n,&K)!=EOF)    {        iCase++;        if(n==0&&K==0)break;        for(i=1;i<=n;i++)scanf("%d",&r[i]);        memset(one,0,sizeof(one));        memset(sum,0,sizeof(sum));        for(i=1;i<=n;i++)        { for(j=1;j<=n;j++) {     middle=(i+j)/2;     for(k=i;k<middle;k++)one[i][j]+=r[middle]-r[k];     for(k=middle+1;k<=j;k++)one[i][j]+=r[k]-r[middle]; } }          for(i=1;i<=n;i++)sum[i][0]=INF;        for(i=1;i<=n;i++)        { for(j=1;j<=i&&j<=K;j++) {     sum[i][j]=INF;     for(k=j-1;k<=i-1;k++)     {         int tmp=sum[k][j-1]+one[k+1][i];         if(tmp<sum[i][j])         {  sum[i][j]=tmp;  from[i][j]=k+1;  to[i][j]=i;  at[i][j]=(k+1+i)/2;         }         }     } }         printf("Chain %dn",iCase);        output(n,K);        printf("Total distance sum = %dnn",sum[n][K]);         }        return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/372651.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号