Codeforces Round #206 (Div. 2) C - Vasya and Robot

来源:互联网 发布:网络协议软件 编辑:程序博客网 时间:2024/04/29 05:47

由于后台初始数据的弱,没有经验这个还是很坑的。。。

1.特判1没考虑

2.漏掉了极端情况

3.没有处理前缀和TLE

4.起初考虑时方向偏了,不是dp

#include <iostream>#include <vector>#include <stack>#include <cstring>#include <cmath>#include <cstdlib>#include <map>#include <queue>#include <set>#include <cstdio>#include <algorithm>using namespace std;/*  define */#define sf(a) scanf("%d",&a)#define sfs(a) scanf("%s",a)#define sfI(a) scanf("%I64d",&a)#define pf(a) printf("%d\n",a)#define pfI(a) printf("%I64d\n",a)#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define clr(a) memset(a,0,sizeof(a))/*  define */typedef long long ll;const int N = 150000;const ll inf = (ll)1<<50;int n,l,r,Ql,Qr;int w[N],sum[N];ll sol(int x){    ll ans=0;    int _ll=x,rr=n-x;    ans+=(ll)sum[_ll]*l;    ans+=(ll)(sum[n]-sum[x])*r;    if(rr>_ll)        ans+=(ll)(rr-_ll-1)*Qr;    else if(rr<_ll)        ans+=(ll)(_ll-rr-1)*Ql;    return ans;}int main(){    while(~scanf("%d%d%d%d%d",&n,&l,&r,&Ql,&Qr)){        rep(i,1,n) sf(w[i]);        if(n==1){            printf("%I64d\n",min((ll)w[1]*r,(ll)w[1]*l));            continue;        }        clr(sum);        rep(i,1,n) sum[i]=sum[i-1]+w[i];        ll ans=inf;        rep(i,0,n){            ans=min(ans,sol(i));        }        pfI(ans);    }}


原创粉丝点击