zoukankan      html  css  js  c++  java
  • CodeForces

    题意

    https://vjudge.net/problem/CodeForces-1253C

    n个糖果,一天最多吃m个糖果,每个糖果有个值a[i],第d天会变成d*a[i],问吃k(k=1~n)个糖果权值和的最小值分别是多少。

    思路

    先排序,再求一遍前缀和。

    比如m=2,排序后:2 3 4 4 6 6 7,那么ans[1]=2,ans[2]=5;对于k=3,贪心的想法肯定是把大的两个第一天吃,小的第二天吃,ans[3]=11;对于k,肯定是把最大的m个第一天吃,剩下的可以通过ans[k-m]得到,但是吃最大的m个会多花一天,那么k-m前面的每个糖果都要多吃一遍(因为天数+1),整合一下,就是ans[k]=ans[k-m]+a[k](这里a是前缀和)。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    #define inf 0x3f3f3f3f
    #define ll long long
    const int N=200005;
    const int mod=1e9+7;
    const double eps=1e-8;
    const double PI = acos(-1.0);
    #define lowbit(x) (x&(-x))
    ll a[N],ans[N];
    int main()
    {
        std::ios::sync_with_stdio(false);
        ll n,m;
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
        }
        sort(a+1,a+1+n);
        for(int i=1;i<=n;i++)
        {
            a[i]+=a[i-1];
        }
        for(int i=1;i<=m;i++)
            ans[i]=a[i];
        for(int i=m+1;i<=n;i++)
        {
            ans[i]=ans[i-m]+a[i];
        }
        for(int i=1;i<=n;i++)
        {
            cout<<ans[i]<<" ";
        }
        cout<<endl;
        return 0;
    }
    

      

  • 相关阅读:
    前端性能优化
    CSS实现文字在容器中对齐方式
    spring里面的context:component-scan
    Builder模式
    idea无法新建maven项目
    Java-位运算
    pg数据库数据表异常挂起
    Java-多线程与单例
    Java-数据结构之二叉树练习
    Java-JNA使用心得
  • 原文地址:https://www.cnblogs.com/mcq1999/p/11966406.html
Copyright © 2011-2022 走看看