• 【BZOJ2697】特技飞行(好久没做过这么水的题了,所以我为何还要水博客)


    点此看题面

    大致题意:(n)个单位时间,每个单位时间可以在(k)个动作中选择一个。一个动作的价值是(这次出现时间-上次出现时间)×这个动作的愉悦值【若一个动作第一次出现则价值为0】。求所能得到价值总和的最大值。

    前言

    做那种高思维强度的题目做得脑壳疼,于是就来做水题轻松一下

    这在洛谷上仅仅是一道(color{green}{绿题})写到这里突然有种颓废般的罪恶感),感觉我是不是已经开始自暴自弃了啊。

    大致思路

    显然,根据它的计算方式,一个动作出现多次的价值其实就等同于只保留首尾两次出现时的价值。

    于是我们就想到把动作按愉悦值从大到小排序,从首尾两侧同时开始摆,直到摆不了为止。然后此时的价值总和就是答案。

    代码

    #include<bits/stdc++.h>
    #define Tp template<typename Ty>
    #define Ts tmeplate<typename Ty,typename... Ar>
    #define Reg register
    #define RI Reg int
    #define Con const
    #define CI Con int&
    #define I inline
    #define W while
    #define K 300
    using namespace std;
    int n,k,a[K+5];I bool cmp(CI x,CI y) {return x>y;}//从大到小排序
    int main()
    {
    	RI i;for(scanf("%d%d",&n,&k),i=1;i<=k;++i) scanf("%d",a+i);
    	RI ans=0;sort(a+1,a+k+1,cmp);
    	for(i=1;i<=min(k,n/2);++i) ans+=a[i]*(n-2*i+1);//从首尾两侧开始摆
    	return printf("%d",ans),0;
    }
    
  • 相关阅读:
    设计模式-抽象工厂
    设计模式-工厂方法
    设计模式-简单工厂
    设计模式-单例模式
    设计模式使用指南
    适合Java程序员看的UML学习手册
    第六周 Java8新特性
    deepin15.11系统使用罗技k380键盘
    动态规划系列之六01背包问题
    《比勤奋更重要的是底层思维》
  • 原文地址:https://www.cnblogs.com/chenxiaoran666/p/BZOJ2697.html
Copyright © 2020-2023  润新知