zoukankan      html  css  js  c++  java
  • IOI2015day1. boxes


    题目链接:http://uoj.ac/problem/229


    题目大意:

    给定一个环,上面有n个点,有m个关键点,每次从0开始只能携带k个

    物品,问最少走多少路径,才能满足所有关键点都得到物品。


    分析:

    首先可以贪心地把关键点分成三种情况

    1.左来左回 f[i]:从左到i满足的最小路径

    2.右来右回 g[i]:从右到i满足的最小路径

    3.走一圈

    f[i]=f[max(0,i-k)]+2*p[i-1] (*2是表示来回路径)

    g[i]=g[min(n+1,i+k)]+2*(L-p[i-1]) (p是从0开始的)


    统计答案:

    枚举分割线

    ans=min(f[i]+g[i+1])

    还有一种情况是中间一段的k个需要走一圈

    if(i+k<=N) ans=min(ans,f[i]+g[i+k+1]+L)


    附上代码:

    #include "boxes.h"
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e7+12;
    long long ans;
    long long f[N],g[N];
    long long delivery(int N, int K, int L, int p[]) 
    {
        ans=1LL<<60;
         f[0]=g[N+1]=0;   
        for(int i=1;i<=N;i++) f[i]=f[max(0,i-K)]+(p[i-1]<<1);
        for(int i=N;i>=1;i--) g[i]=g[min(N+1,i+K)]+((L-p[i-1])<<1);
        
        for(int i=0;i<=N;i++)
        {
            ans=min(ans,f[i]+g[i+1]);
            if(i+K<=N) ans=min(ans,f[i]+g[i+K+1]+L);
        }
        return ans;
    }
    View Code

  • 相关阅读:
    nginx启动失败
    Windows下载安装docker详细步骤
    Consul
    Idea导入多个maven项目到同一目录下
    使用V-chart时踩过的一些坑
    java集合超详解
    HashMap
    curl和wget的区别和使用
    SourceTree3.2.6版本跳过注册办法
    单点登录
  • 原文地址:https://www.cnblogs.com/Heey/p/8982082.html
Copyright © 2011-2022 走看看