您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页2018.09.16 atcoder Garbage Collector(贪心)

2018.09.16 atcoder Garbage Collector(贪心)

来源:化拓教育网


昨晚打比赛的时候不是很机智啊。
这道题贪心就能过了。
我们可以发现一个明显的结论,每次选的垃圾的距离从大到小排序之后,每个距离对答案的贡献的系数是5,5,7,9,11…也就是最远的是5,其余都是2*rank+1。
这样就可以根据每次选几个垃圾来贪心。
代码:

#include<bits/stdc++.h>
#define ll long long
#define N 200005
using namespace std;
inline int read(){
    int ans=0;
    char ch=getchar();
    while(!isdigit(ch))ch=getchar();
    while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
    return ans;
}
int n;
ll ans=1e18,X,x[N],sum[N];
int main(){
    n=read(),X=read();
    for(int i=1;i<=n;++i)sum[i]=(x[i]=read())+sum[i-1];
    for(int k=1;k<=n;++k){
        ll tmp=0;
        for(int j=1,l=0,r=n;r&&tmp+k*X<ans;++j,r=l-1){
            l=max(r-k+1,1);
            tmp+=(j==1?5:(j<<1)+1)*(sum[r]-sum[l-1]);
        }
        ans=min(ans,tmp+k*X);
    }
    printf("%lld",ans+n*X);
    return 0;
}

转载于:https://www.cnblogs.com/ldxcaicai/p/9738257.html

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务