ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ABC 263.D - Left Right Operation(思维)

2022-08-07 01:05:42  阅读:177  来源: 互联网

标签:10 ABC Sample int LL 263 Right Input include


https://atcoder.jp/contests/abc263/tasks/abc263_d

给我们一个长度为n的序列
只需执行一次以下连续操作:

选择一个整数x,将前x个数全部换成L
选择一个整数y,将后y个数全部换成R

问我们能得到的最小总和是多少?
Sample Input 1 
5 4 3
5 5 0 6 3
Sample Output 1 
14

Sample Input 2 
4 10 10
1 2 3 4
Sample Output 2 
10

Sample Input 3 
10 -5 -3
9 -6 10 -1 2 10 -1 7 -15 5
Sample Output 3 
-58
  • 这个题目我一开始不敢动笔写是因为分了三个段,
    然后不知道该在什么地方停止取,什么地方取下一段
  • 在看到各位大佬的代码时我仔细想了一下:为啥么不会出现一个取,一个不取的现象?
    因为每次都是跟L*i进行对比的嘞,所以就算想走歪路也不会偏的
    失策了,还是练得少了,加练
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
typedef long long LL;
const int N=200200;
LL a[N];
LL f[N],g[N];
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    LL n,L,R;
    cin>>n>>L>>R;
    for(LL i=1;i<=n;i++)
        cin>>a[i];
    f[0]=0;
    for(LL i=1;i<=n;i++)
        f[i]=min(f[i-1]+a[i],i*L);
    /*for(int i=0;i<=n;i++)
        cout<<f[i]<<" ";
    cout<<endl;*/
    g[n+1]=0;
    for(LL i=n;i>=1;i--)
        g[i]=min(g[i+1]+a[i],(n-i+1)*R);
    /*for(int i=0;i<=n;i++)
        cout<<g[i]<<" ";
    cout<<endl;*/
    LL minn=1e18;
    for(LL i=0;i<=n;i++)
    {
        minn=min(minn,f[i]+g[i+1]);
    }
    cout<<minn<<endl;
    return 0;
}

标签:10,ABC,Sample,int,LL,263,Right,Input,include
来源: https://www.cnblogs.com/Vivian-0918/p/16558278.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有