zoukankan      html  css  js  c++  java
  • 【CodeForces】913 C. Party Lemonade

    【题目】C. Party Lemonade

    【题意】给定n个物品,第i个物品重量为2^(i-1)价值为ci,每个物品可以无限取,求取总重量>=L的最小代价。1<=30<=n,1<=L,ci<=10^9。

    【算法】数学(二进制原理)

    【题解】实际上每个物品的重量对应答案的一个二进制位,先对物品进行预处理:

    1.将没用的大物品用小物品替代(价值不如前面的小物品叠加)。

    2.用单价最小的物品补齐后面的二进制位。

    然后把L二进制展开,从小到大扫描:如果该位是1则必须选择该物品,如果该位是0则当该物品代价<前面总代价时,用这一个物品替换前面的所有物品。

    #include<cstdio>
    #define ll long long
    int n,L;
    ll c[100];
    int main(){
        scanf("%d%d",&n,&L);
        for(int i=0;i<n;i++)scanf("%lld",&c[i]);
        ll mxc=1ll<<60,mxnum=1;
        for(int i=0;i<n;i++){
            if(c[i]*mxnum>mxc*(1<<i))c[i]=1ll*mxc*((1<<i)/mxnum);
            else mxc=c[i],mxnum=1<<i;
        }
        for(int i=n;i<=30;i++)c[i]=1ll*mxc*((1<<i)/mxnum);
        ll ans=0;
        for(int i=0;i<=30;i++){
            if(L&(1<<i))ans+=c[i];else if(ans>c[i])ans=c[i];
        }
        printf("%lld",ans);
        return 0;
    }
    View Code
  • 相关阅读:
    JSON序列化选项
    JOSN的stringify()和parse()方法
    html5增强元素--续
    html5页面增强元素
    js继承模式
    js常用设计模式
    js跨浏览器事件处理
    前端兴趣浓厚,后端提不起来兴趣
    padding的讲究
    margin的讲究
  • 原文地址:https://www.cnblogs.com/onioncyc/p/8250520.html
Copyright © 2011-2022 走看看