zoukankan      html  css  js  c++  java
  • 【CF Manthan, Codefest 17 B】Marvolo Gaunt's Ring

    【链接】h在这里写链接


    【题意】


    给你n个数字;
    让你在其中找出三个数字i,j,k(i<=j<=k);
    使得p*a[i]+q*a[j]+r*a[k]最大;

    【题解】


    /*
        有一个要求i<=j<=k;
        也就是说系数之间的下标是有关系的。
        枚举第一个位置的下标i;
            则第二个人j
            i<=j<n
            枚举中间那个人的位置在哪。
        求出前i个位置,第一个人能获得的最大值是多少
        求出后n-i个位置,第三个人能获得的最大值是多少
    */

    【错的次数】


    1

    【反思】


    一开始并没有注意到顺序的作用。
    hack点是:很多人的初始化不够小.
    1 1e9 1e9 1e9
    -1e9
    这组数据过不了

    【代码】

    #include <bits/stdc++.h>
    #define LL long long
    using namespace std;
    
    const int N = 1e5;
    
    int n;
    LL pre[N+10],after[N+10];//前缀最大,后缀最大
    LL a[N+10],p,q,r;
    
    int main()
    {
    	//freopen("F:\rush.txt", "r", stdin);
    	scanf("%d%lld%lld%lld", &n, &p, &q, &r);
        for (int i = 1;i <= n;i++)
            scanf("%lld",&a[i]);
        pre[1] = p*a[1];
        for (int i = 2;i <= n;i++) pre[i] = max(pre[i-1],p*a[i]);
        after[n] = r*a[n];
        for (int i = n-1;i >= 1;i--) after[i] = max(after[i+1],r*a[i]);
        LL ans = pre[1]+after[1]+q*a[1];
        for (int i = 2;i <= n;i++)
            ans = max(ans,pre[i]+after[i]+q*a[i]);
        printf("%lld
    ",ans);
    	return 0;
    }


  • 相关阅读:
    关于点击率模型,你知道这三点就够了
    【AI】Computing Machinery and Intelligence
    MATLAB 的函数句柄
    MATLAB 的unique函数——数组矩阵的唯一值
    MATLAB 的数据导入与导出
    MATLAB 的函数
    MATLAB 向量
    MATLAB 的break语句和continue语句
    MATLAB 的循环语句
    MATLAB 的条件分支语句
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7625987.html
Copyright © 2011-2022 走看看