zoukankan      html  css  js  c++  java
  • 分组

    题目描述

    在Farmer John最喜欢的节日里,他想要给他的朋友们赠送一些礼物。由于他并不擅长包装礼物,他想要获得他的奶牛们的帮助。你可能能够想到,奶牛们本身也不是很擅长包装礼物,而Farmer John即将得到这一教训。
    Farmer John的N头奶牛((1≤N≤10^4))排成一行,方便起见依次编号为1…N。奶牛i的包装礼物的技能水平为(s_i)。她们的技能水平可能参差不齐,所以FJ决定把她的奶牛们分成小组。每一组可以包含任意不超过K头的连续的奶牛((1≤K≤10^3)),并且一头奶牛不能属于多于一个小组。由于奶牛们会互相学习,这一组中每一头奶牛的技能水平会变成这一组中水平最高的奶牛的技能水平。

    请帮助FJ求出,在他合理地安排分组的情况下,可以达到的技能水平之和的最大值。

    输入描述:

    输入的第一行包含N和K。以下N行按照N头奶牛的排列顺序依次给出她们的技能水平。技能水平是一个不超过10^5的正整数。

    输出描述:

    输出FJ通过将连续的奶牛进行分组可以达到的最大技能水平和。

    输入

    7 3
    1
    15
    7
    9
    2
    5
    10
    

    输出

    84
    

    说明

    在这个例子中,最优的方案是将前三头奶牛和后三头奶牛分别分为一组,中间的奶牛单独成为一组(注意一组的奶牛数量可以小于K)。这样能够有效地将7头奶牛的技能水平提高至15、15、15、9、10、10、10,和为84。

    dp一开始没想到,当然是看了题解。
    dp[i]=max(dp[i],dp[j-1]+(i-j+1)*maxn), 其中,maxn=max(s[j],s[j+1]......,s[i])

    #include<bits/stdc++.h>
    using namespace std;
    inline char gc() {
        static char buf[100000],*L=buf,*R=buf;
        return L==R&&(R=(L=buf)+fread(buf,1,100000,stdin),L==R)?EOF:*L++;
    }
    template<typename T>
    inline void read(T&x) {
        int f=1;
        char ch=gc();
        x=0;
        while (ch<'0'||ch>'9') {
            if(ch=='-')f=-1;
            ch=gc();
        }
        while (ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-48,ch=gc();
        x*=f;
    }
    int n,k,s[10010],dp[10010]={0};
    int main(){
        read(n),read(k);
        for(int i=1;i<=n;++i)read(s[i]);
        for(int i=1;i<=n;++i){
            int M=s[i];
            for(int j=i;j>0&&i-j<k;--j){
                M=max(M,s[j]);
                dp[i]=max(dp[i],dp[j-1]+M*(i-j+1));
            }
        }
        printf("%d",dp[n]);
        return 0;
    }
    
  • 相关阅读:
    JS的中数的取值范围的大小
    前端通过xlsx插件导入excel
    H5和安卓原生进行交互的操作流程记录
    javascript中字符串和数字之间互相转换的方法总结
    gitlab代码合并到主分支
    typeof和valueof、instance of 之间的区别
    javascript中map会改变原始的数组吗
    使用typescript来写react遇到的一些问题
    使用javascript进行时间数据格式的转换
    在vue的移动端项目中使用vue-echarts
  • 原文地址:https://www.cnblogs.com/foursmonth/p/14144831.html
Copyright © 2011-2022 走看看