当前位置: 代码迷 >> 综合 >> HDU 1227 Fast Food DP *
  详细解决方案

HDU 1227 Fast Food DP *

热度:116   发布时间:2023-09-23 06:16:29.0

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1227

状态很好定义,关键是怎么递推,加入一个仓库后的影响怎么算出来

思路:http://www.cnblogs.com/jackge/archive/2013/03/27/2984463.html

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn=200+5;
const int INF=0x3f3f3f3f;
int rest[maxn],d[maxn][maxn],cost[maxn][maxn];
int inline getCost(int x,int y)
{if(cost[x][y]) return cost[x][y];int mid=(x+y)/2;int sum=0;for(int i=x;i<=y;i++)sum+=abs(rest[i]-rest[mid]);return cost[x][y]=sum;
}
int main(int argc, char const *argv[])
{int n,k,kase=0; while(cin>>n>>k,(n+k)){memset(d,INF,sizeof(d));memset(cost,0,sizeof(cost));for(int i=1;i<=n;i++)scanf("%d",&rest[i]);for(int i=1;i<=k;i++)for(int j=1;j<=n;j++){if(i==1) d[1][j]=getCost(1,j);else for(int m=i-1;m<=j-1;m++)d[i][j]=min(d[i-1][m]+getCost(m+1,j),d[i][j]);}printf("Chain %d\nTotal distance sum = %d\n\n",++kase,d[k][n]);}return 0;
}


  相关解决方案