zoukankan      html  css  js  c++  java
  • 【洛谷P3035】[USACO11DEC]伞头Umbrellas for Cows

    题目描述

    在 X 数轴上有 M 个整数点,点的坐标分别是 1 至 M。有 N(1<= N<= 5000)只奶牛,编号为 1.. N,第 i 只奶牛所在的整数点坐标是 Xi(1<= Xi <= M <= 100,000), 没有两头奶牛在相同的点上。现在正在下雨,为了保护奶牛,FJ 需要购买很多把雨伞,把所有的奶牛都遮住。如果一把雨伞能遮住坐标是 a 到坐标是 b 的这一段(a<=b),那么这把雨伞的宽度就是 b-a+1。现在我们给出购买宽度是 1 的雨伞的价格,购买宽度是 2 的雨伞的价格,…购买宽度是 M 的雨伞的价格。

    这里特别需要注意:宽度更大的雨伞的价格不一定超过宽度较小的雨伞,这完全取决于读入数据。你的任务是帮助 FJ 找到购买雨伞最低的成本,使得这些雨伞能把所有的奶牛遮住,从而不淋雨。需要注意的是最佳的解决方案雨伞可能会重叠。

    输入输出格式

    输入格式:

    第 1 行:两个空间分隔的整数:N 和 M。

    下来有 N 行,包含一个整数:Xi,表示第 i 头奶牛所在的点的坐标值。

    接下来有 M 行:每行包含一个整数 Ci,表示购买宽度是 i 的雨伞的价格是 Ci 元。

    输出格式:

    一个整数,是最低的成本。

    说明

    There are 12 stalls, and stalls 1, 2, 4, 8, 11, and 12 contain cows. An umbrella covering one stall costs 2, an umbrella covering two stalls costs 3, and so on.

    By purchasing a size 4 umbrella, a size 1 umbrella, and a size 2 umbrella, it is possible to cover all the cows at a cost of 4+2+3=9:

    UUUUUUUUUU U UUUU

    C C C C C C

    |--|--|--|--|--|--|--|--|--|--|--| 1 2 3 4 5 6 7 8 9 10 11 12

    C represents a cow and U represents a part of an umbrella.

    1、 买一把长度是 4 的雨伞去遮住坐标在 1、2、4 的三头奶牛,费用是 4;

    2、 买一把长度是 1 的雨伞遮住坐标在 8 的奶牛,费用是 2;

    3、 买一把长度是 2 的雨伞遮住坐标在 11、12 的两头奶牛,费用是 3。

    总费用是 4 +2+ 3 = 9。

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int maxn=100005;
    const int INF=1e9;
    inline void read(int &x){
        x=0; char ch=getchar();
        while(ch<'0'||ch>'9') ch=getchar();
        while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    }
    int n,m;
    int a[maxn],c[maxn],f[maxn];
    int main(){
        read(n);read(m);
        for(int i=1;i<=n;++i) read(a[i]);
        for(int i=1;i<=m;++i) read(c[i]);
        sort(a+1,a+n+1);
        for(int i=m-1;i>=1;--i) c[i]=min(c[i],c[i+1]);
        for(int i=1;i<=n;++i){
            f[i]=INF;
            for(int j=i;j>0;--j)
            f[i]=min(f[i],f[j-1]+c[a[i]-a[j]+1]);
        }
        printf("%d
    ",f[n]);
        return 0;
    }
  • 相关阅读:
    css 画图形大全
    css 动画中 ease,seae-in,ease-in-out,ease-out,效果区别
    css3 常用动画 随笔
    OpenCV局部变形算法探究
    利用moment为基础,基于DOM实现一个多个倒计时同时进行的js库方便使用
    nodejs 中使用 mocha + should + jscoverage 生成 单元测试覆盖率报告
    AutoX安途杯中山大学程序设计校赛 G Stack Sort I
    理解原生JAVA AOP思想
    分享几个MFC下建立隐藏运行的程序的方法(不会出现黑色框)。
    发一个自己封装的PNG透明图片类。
  • 原文地址:https://www.cnblogs.com/huihao/p/7758008.html
Copyright © 2011-2022 走看看