zoukankan      html  css  js  c++  java
  • 【Coreforces 1253E】

    题意:一个长为M的街道,安装一个设备,现在有这种设备N个,这种设备在[x-s,x+s]这段区间内可以使用,增加区间大小1格需要收取1费用
    求使设备能够正常使用所需的最小费用。
    题解:首先想到是暴力并考虑每种状态,压缩时间空间复杂度后
    1、使每个状态初始时保证最大值。
    2、遍历分两种
    ① 当i<=x时,若i在当前所便利的设备覆盖的区间内或者之前有设备覆盖区则等于之前存储的最大值,否则等于本身。
    dp[i]=min(dp[i],dp[max(num[j].l-num[j].r-1,0)]);
    ② 当i>x时,面对这种情况时,可能之前的信号覆盖区已将覆盖,如果没有,添加信号覆盖区i-num[j].r-num[j].l
    dp[i]=min(dp[i],dp[max(2*num[j].l-i-1,0)]+max(i-num[j].r-num[j].l,0));

    /*
     * 2019.12.22
     * */
    #include <cstdio>
    using namespace std;
    const int MAXN = 1e5+5;
    struct node{
        int l,r;
    }num[100];
    int dp[MAXN];
    int max(int a,int b){
        return a>b?a:b;
    }
    int min(int a,int b){
        return a<b?a:b;
    }
    int main(){
        int N,M;
        scanf("%d%d",&N,&M);
        for(int i=0;i<N;i++){
            scanf("%d%d",&num[i].l,&num[i].r);
        }
        for(int i=0;i<=M;i++){
            dp[i]=i;
        }
        for(int i=1;i<=M;i++){
            for(int j=0;j<N;j++){
                if(i<=num[j].l){
                    dp[i]=min(dp[i],dp[max(num[j].l-num[j].r-1,0)]);
                }
                else{
                    dp[i]=min(dp[i],dp[max(2*num[j].l-i-1,0)]+max(i-num[j].r-num[j].l,0));
                }
            }
        }
        printf("%d
    ",dp[M]);
        return 0;
    }
    
  • 相关阅读:
    css
    博客目录
    macOS下psql客户端中文乱码问题
    PostgreSQL dblink的使用
    error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 60
    mac中环境变量配置
    PostgreSQL Copy 命令
    Linux下rz命令和sz命令使用方法
    Tmux 使用教程
    create_time和update_time自动填写
  • 原文地址:https://www.cnblogs.com/Vagrant-ac/p/12081261.html
Copyright © 2011-2022 走看看