• [贪心]JZOJ 3012 购买


    Description

    小N 最近迷上了购物每天都让小A 和小T 陪她逛街拿东西。最近商店出了这样的一个

    活动:买东西送积分,就是买一件物品,送当前物品的积分ci*当前的倍率,初始倍率是1;

    当倍率是i 的时候,如果你买的物品等于ti 个,那么倍率将加1.最多积分的人可以得到超限

    量版的圆神手办。小N 十分喜欢这个手办但是她又有自己的购物计划,于是她想在这个计

    划下尽量提高自己的积分。她有n 种东西要买,其中第i 种物品她要买ki 个,每个可以得到

    ci 的积分。请告诉她积分最多能得到多少吧。

     

    Input

    第一行有一个整数n表示要买的种类。


    接下来n行每行2个整数ki,ci表示数量和积分


    接下来一行有一个正整数t表示奖励的倍数


    接下来一行有t个递增的整数ti表示买了ti个物品之后以后买的物品得到的积分倍率将是(i+1)


    Output

    一个整数,表示小N能得到的最多积分


     

    Sample Input

    1
    5 3
    2
    3 6
    

    Sample Output

    21
     

    Data Constraint

     
     

    Hint

    前3个物品得到的积分是3*3*1=9,后面2个物品的积分是3*2*2=12


    60%的数据n<=10,sigma(ki)<=1000000


    100%的数据n<=100,t<=100,ki<=10^9,0<=ci<=1000,ti<=10^12

    分析

    将物品积分升序排序,贪心计算即可

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    typedef long long ll;
    struct Item {
        ll k,c;
        friend bool operator < (Item a,Item b) {
            return a.c<b.c;
        }
    }a[110];
    int n,T;
    ll t[110],ans,sk;
    
    int main() {
        scanf("%d",&n);
        for (int i=1;i<=n;i++) scanf("%lld%lld",&a[i].k,&a[i].c);
        sort(a+1,a+n+1);
        scanf("%d",&T);
        for (int i=1;i<=T;i++) scanf("%lld",&t[i]);
        int i=1,j=1;ll k=1;
        while (i<=n) {
            if (j<=T) {
                if (t[j]>sk+a[i].k) sk+=a[i].k,ans+=k*a[i].k*a[i].c,i++;
                else {
                    ll last=sk;
                    while (j<=T&&t[j]<=sk+a[i].k) {
                        ans+=k*(t[j]-last)*a[i].c;
                        last=t[j];
                        j++;k++;
                    }
                    sk+=a[i].k;ans+=k*(sk-last)*a[i].c;i++;
                }
            }
            else {
                ans+=k*a[i].k*a[i].c;
                i++;
            }
        }
        printf("%lld",ans);
    }
    View Code
    在日渐沉没的世界里,我发现了你。
  • 相关阅读:
    Java泛型 PECS(Producer Extends, Consumer Super)
    JDK(七)JDK1.8源码分析【集合】TreeMap
    JDK(六)JDK1.8源码分析【集合】LinkedHashMap
    JDK(五)JDK1.8源码分析【集合】HashMap
    JDK(四)JDK1.8源码分析【排序】DualPivotQuicksort
    JDK(三)JDK1.8源码分析【排序】mergeSort
    JDK(二)JDK1.8源码分析【排序】timsort
    第24天多线程技术
    第23天功能流、图形化界面、多线程
    第二十二天 字符流、缓冲区、转换流
  • 原文地址:https://www.cnblogs.com/mastervan/p/11136085.html
Copyright © 2020-2023  润新知