hdu 1227 Fast Food

http://acm.hdu.edu.cn/showproblem.php?pid=1227

在n个商店中建m个仓库,使各个商店到仓库的路程之和最小,商店到哪个仓库是有选择的,求路程之和最小。

dp[i][j]为建i个仓库前j个商店。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define maxn 1000
 5 using namespace std;
 6 const int inf=1<<29;
 7
 8 int dp[40][maxn];
 9 int d[maxn];
10 int dis[maxn][maxn];
11 int n,k;
12
13 int main()
14 {
15     int cas=0;
16     while(scanf("%d%d",&n,&k)!=EOF)
17     {
18         if(n==0&&k==0) break;
19         memset(dis,0,sizeof(dis));
20         for(int i=1; i<=n; i++)
21         {
22            scanf("%d",&d[i]);
23         }
24         for(int i=1; i<=k; i++)
25         {
26             for(int j=i; j<=n; j++)
27             {
28                 dp[i][j]=inf;
29             }
30         }
31         for(int i=1; i<=n; i++)
32         {
33             for(int j=i; j<=n; j++)
34             {
35                 for(int c=i; c<=j; c++)
36                 dis[i][j]+=abs(d[c]-d[(i+j)/2]);
37             }
38             dp[1][i]=dis[1][i];
39         }
40         for(int i=2; i<=k; i++)
41         {
42             for(int j=i; j<=n; j++)
43             {
44                 for(int c=i-1; c<=j-1; c++)
45                 {
46                     dp[i][j]=min(dp[i][j],dp[i-1][c]+dis[c+1][j]);
47                 }
48             }
49         }
50         printf("Chain %d\n",++cas);
51         printf("Total distance sum = %d\n\n",dp[k][n]);
52     }
53     return 0;
54 }

hdu 1227 Fast Food

时间: 2024-10-10 04:22:58

hdu 1227 Fast Food的相关文章

HDU 1227 Fast Food (DP)

题目链接 题意 : 有n个饭店,要求建k个供应点,要求每个供应点一定要建造在某个饭店的位置上,然后饭店都到最近的供应点拿货,求出所有饭店到最近的供应点的最短距离. 思路 : 一开始没看出来是DP,后来想想就想通了.预处理,如果要在下标为 i 到 j 的饭店建一个供应点,那一定是在下标为(i+j)/2的位置建造的,状态转移方程:dp[i][j] = dp[i-1][k-1]+dis[k][j](i <= k <= j) ,dp[i][j]代表的是在前 j 个饭店中建了 i 个供应点的最小距离.方

[ACM] HDU 1227 Fast Food (经典Dp)

Fast Food Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2173    Accepted Submission(s): 930 Problem Description The fastfood chain McBurger owns several restaurants along a highway. Recently,

hdu 1227 Fast Food(DP)

题意: X轴上有N个餐馆.位置分别是D[1]...D[N]. 有K个食物储存点.每一个食物储存点必须和某个餐厅是同一个位置. 计算SUM(Di-(离第i个餐厅最近的储存点位置))的最小值. 1 <= n <= 200, 1 <= k <= 30, k <= n 思路: 第K个储存点的位置如果确定,前K-1个储存点的位置是浮动的.有很多的重复子结构.DP的结构很明显. dp[i][j]:第i个储存点放在第j个餐馆的位置所得到的最小值. 代码: int n,k; int pos[

hdu 1227(经典dp)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1227 Fast Food Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2165    Accepted Submission(s): 926 Problem Description The fastfood chain McBurger

HDU 4965 Fast Matrix Calculation 【矩阵】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4965 题目大意:给你一个N*K的矩阵A以及一个K*N的矩阵B (4 <= N <= 1000)以及 (2 <=K <= 6),然后接下来四步: 算一个新的矩阵C=A*B 算M=C^ (N*N) 对于M中的每个元素%6 将M中每个元素加起来,算出和. 也就是求出A*B * A*B * A*B * A*B * A*B *--* A*B   但是A*B形成的矩阵是N*N,而N大小有可能是10

hdu 4965 Fast Matrix Calculation(矩阵快速幂)

题目链接:hdu 4965 Fast Matrix Calculation 题目大意:给定两个矩阵A,B,分别为N*K和K*N: 矩阵C = A*B 矩阵M=CN?N 将矩阵M中的所有元素取模6,得到新矩阵M' 计算矩阵M'中所有元素的和 解题思路:因为矩阵C为N*N的矩阵,N最大为1000,就算用快速幂也超时,但是因为C = A*B, 所以CN?N=ABAB-AB=AC′N?N?1B,C' = B*A, 为K*K的矩阵,K最大为6,完全可以接受. #include <cstdio> #inc

HDU 4965 Fast Matrix Calculation(矩阵快速幂)

HDU 4965 Fast Matrix Calculation 题目链接 矩阵相乘为AxBxAxB...乘nn次,可以变成Ax(BxAxBxA...)xB,中间乘n n - 1次,这样中间的矩阵一个只有6x6,就可以用矩阵快速幂搞了 代码: #include <cstdio> #include <cstring> const int N = 1005; const int M = 10; int n, m; int A[N][M], B[M][N], C[M][M], CC[N]

HDU 4965 Fast Matrix Calculation(矩阵高速幂)

HDU 4965 Fast Matrix Calculation 题目链接 矩阵相乘为AxBxAxB...乘nn次.能够变成Ax(BxAxBxA...)xB,中间乘n n - 1次,这样中间的矩阵一个仅仅有6x6.就能够用矩阵高速幂搞了 代码: #include <cstdio> #include <cstring> const int N = 1005; const int M = 10; int n, m; int A[N][M], B[M][N], C[M][M], CC[N

hdu 4965 Fast Matrix Calculation(矩阵快速幂)2014多校训练第9场

Fast Matrix Calculation                                                                   Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Problem Description One day, Alice and Bob felt bored again, Bob knows Ali