zoukankan      html  css  js  c++  java
  • 【简】题解 AWSL090429 【噪音】

    因为每次加上一头奶牛 是什么不重要

    牛棚之间贡献除清空操作外无影响

    就只要考虑 每个牛棚清空分x次 的贡献

    x之和为k       求贡献和最小

    一个牛棚清空x次 显然平均清空贡献最小 再用等差数列的公式求

    之和就是裸的dp

    #include<bits/stdc++.h> 
    using namespace std;
    #define ll long long
    #define C getchar()-48
    inline ll read()
    {
        ll s=0,r=1;
        char c=C;
        for(;c<0||c>9;c=C) if(c==-3) r=-1;
        for(;c>=0&&c<=9;c=C) s=(s<<3)+(s<<1)+c;
        return s*r;
    } 
    const ll N=1e6+10,inf=1e9+10; 
    ll n,m,top;
    ll p[N];
    ll gs[N];
    ll dp[110][510]; 
    inline ll js(ll w,ll k)
    {
        ll v=gs[w];k++;
        ll bs=v/k;
        ll duo=v-bs*k;
        return duo*(1+bs+1)*(bs+1)/2+(k-duo)*(1+bs)*bs/2;
    }
    int main()
    {
        freopen("noise.in","r",stdin);
        freopen("noise.out","w",stdout); 
        n=read(),m=read(),top=read();
        for(ll i=1;i<=n;i++) p[i]=read(),gs[p[i]]++;
        
        for(ll i=1;i<=m;i++)
        for(ll j=0;j<=top;j++)
          dp[i][j]=inf;
          
        for(ll i=1;i<=m;i++)
        for(ll k=0;k<=top;k++)
        for(ll del=0;del<=k;del++)
        {
            dp[i][k]=min(dp[i][k],dp[i-1][k-del]+js(i,del));    
        }
        cout<<dp[m][top];
        return 0;
    }
  • 相关阅读:
    SGU 275. To xor or not to xor
    4364: [IOI2014]wall砖墙
    3211: 花神游历各国
    5248: [2018多省省队联测]一双木棋
    3106: [cqoi2013]棋盘游戏
    POJ 1568 Find the Winning Move
    P3527 [POI2011]MET-Meteors
    P2617 Dynamic Rankings
    3262: 陌上花开
    1176: [Balkan2007]Mokia
  • 原文地址:https://www.cnblogs.com/1436177712qqcom/p/10788409.html
Copyright © 2011-2022 走看看