• [DP]Building Shops


    Building Shops

    Problem Description

    HDU’s n classrooms are on a line ,which can be considered as a number line. Each classroom has a coordinate. Now Little Q wants to build several candy shops in these n classrooms.

    The total cost consists of two parts. Building a candy shop at classroom i would have some cost ci . For every classroom P without any candy shop, then the distance between P and the rightmost classroom with a candy shop on P 's left side would be included in the cost too. Obviously, if there is a classroom without any candy shop, there must be a candy shop on its left side.

    Now Little Q wants to know how to build the candy shops with the minimal cost. Please write a program to help him.

    Input

    The input contains several test cases, no more than 10 test cases.
    In each test case, the first line contains an integer n(1n3000) , denoting the number of the classrooms.
    In the following n lines, each line contains two integers xi,ci(109xi,ci109) , denoting the coordinate of the i -th classroom and the cost of building a candy shop in it.
    There are no two classrooms having same coordinate.

    Output

    For each test case, print a single line containing an integer, denoting the minimal cost.

    Sample Input

    3
    1 2
    2 3
    3 4
    4
    1 7
    3 1
    5 10
    6 1

    Sample Output

    5
    11

    正确解法:

    有几个线性排列的空教室,现在准备把几个教室建造成糖果屋

    1.每个教室建造糖果屋的成本为ci

    2.空教室的成本是 与左边最近糖果屋的距离

    我们用DP来做,f[i][1]表示第i个建造糖果屋,前i个的成本

    f[i][0]表示第 i 个不建造糖果屋,前i个的成本。

    很容易得出 f[i][1]=min(f[i-1][1],f[i-1][0])+ci;

    f[i][0]=min(f[j][1]+  (j+1,j+2  ……,i 到j的距离))

    ll t=0;
    for(int j=i-1;j>=1;j--)
    {
        t+=(i-j)*(a[j+1].x-a[j].x);
        f[i][0]=min(f[i][0],f[j][1]+t);
    }

    最后,它的xi和ci 是(1,10^9) 开了 ll

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <algorithm>
     6 #include <set>
     7 #include <map>
     8 #include <queue>
     9 #include <vector>
    10 #include <cctype>
    11 #include <sstream>
    12 using namespace std;
    13 typedef long long ll;
    14 const int inf=0x7fffffff;
    15 const int N=3000+100;
    16 const int M=50000+10;
    17 const int MOD=1e9+7;
    18 const double PI=acos(-1.0);
    19 int n;
    20 ll f[N][3];
    21 ll MM=999999999999;
    22 struct node
    23 {
    24     ll x,c;
    25 }a[N];
    26 bool cmp(node a,node b)
    27 {
    28     return (a.x<b.x);
    29 }
    30 int main()
    31 {
    32     while(scanf("%d",&n)!=EOF)
    33     {
    34         //f[0][1]=f[0][0]=0;
    35         for(int i=1;i<=n;i++)
    36             f[i][1]=f[i][0]=MM;
    37         for(int i=1;i<=n;i++)
    38             scanf("%lld %lld",&a[i].x,&a[i].c);
    39         sort(a+1,a+n+1,cmp);
    40         for(int i=1;i<=n;i++)
    41         {
    42             f[i][1]=min(f[i-1][0],f[i-1][1])+a[i].c;
    43             ll t=0;
    44             for(int j=i-1;j>=1;j--)
    45             {
    46                 t+=(i-j)*(a[j+1].x-a[j].x);
    47                 f[i][0]=min(f[i][0],f[j][1]+t);
    48             }
    49         }
    50         printf("%lld
    ",min(f[n][1],f[n][0]));
    51     }
    52 
    53 
    54     return 0;
    55 }
    View Code
  • 相关阅读:
    ant-design-vue a-tree默认展开所有父节点不生效
    CSS模型简介
    一点BFC的看法
    css提高开发效率的必备代码
    CSS模型简介-逆战班
    CSS 样式:常用居中方法
    rem 自适应布局 js 代码
    CSS 样式 :position-absolute 绝对定位属性
    CSS 样式
    CSS样式字体初解
  • 原文地址:https://www.cnblogs.com/Kaike/p/10912551.html
Copyright © 2020-2023  润新知