题目链接:http://codeforces.com/contest/355/problem/C

题意:1~n n个物品各重wi,现在有一个人可以从左边拿和从右边拿, 左边拿一个物品的花费是l*wi,从右边拿是r*wi。然后如果有一次从左边拿的上一次操作也是从左边拿的,就要额外花费ql,同理右边,问最小花费。

眼瞎胡乱跑了一发dp结果T了…

仔细观察就会发现,题意说的是…左手一定从最左边拿,右手一定从最右边拿……

那么一定有一个点,这个点的左手边全是左手拿的,右手边都是右手拿的。

那么枚举这个点,然后再判断这个点左手拿比较好还是右手拿比较好。由于代价都一样,所以可以先计算出两边的分别代价,然后算算某一侧比另一侧多了多少个,也就是需要额外q的花费的个数,贪心地认为这区间是交叉着取的,那么就最后算算多少个q花费就行了。

 #include <bits/stdc++.h>
using namespace std; typedef long long LL;
const LL maxn = ;
const LL inf = 0x7f7f7f7f;
int n, l, r, ql, qr;
int w[maxn];
LL ls[maxn], rs[maxn];
LL ret; int main() {
// freopen("in", "r", stdin);
while(~scanf("%d%d%d%d%d",&n,&l,&r,&ql,&qr)) {
memset(ls, , sizeof(ls));
memset(rs, , sizeof(rs));
for(int i = ; i <= n; i++) scanf("%d", &w[i]);
for(int i = ; i <= n; i++) ls[i] = ls[i-] + w[i] * l;
for(int i = n; i >= ; i--) rs[i] = rs[i+] + w[i] * r;
ret = inf;
for(LL i = ; i <= n; i++) {
LL s = ls[i-] + rs[i+];
LL ln = i - , rn = n - i;
if(ln > rn) ret = min(ret, s+(ln-rn-)*ql+min(w[i]*l+ql,w[i]*r));
else if(ln < rn) ret = min(ret, s+(rn-ln-)*qr+min(w[i]*l,w[i]*r+qr));
else ret = min(ret, s+min(w[i]*l,w[i]*r));
}
printf("%I64d\n", ret);
}
return ;
}

[CF355C]Vasya and Robot(思维,贪心)的更多相关文章

  1. CF 1073C Vasya and Robot(二分答案)

    C. Vasya and Robot time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  2. Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot 【二分 + 尺取】

    任意门:http://codeforces.com/contest/1073/problem/C C. Vasya and Robot time limit per test 1 second mem ...

  3. 2018-2019 ACM-ICPC, Asia Xuzhou Regional Contest- H. Rikka with A Long Colour Palette -思维+贪心

    2018-2019 ACM-ICPC, Asia Xuzhou Regional Contest- H. Rikka with A Long Colour Palette -思维+贪心 [Proble ...

  4. E. The Contest ( 简单DP || 思维 + 贪心)

    传送门 题意: 有 n 个数 (1 ~ n) 分给了三个人 a, b, c: 其中 a 有 k1 个, b 有 k2 个, c 有 k3 个. 现在问最少需要多少操作,使得 a 中所有数 是 1 ~ ...

  5. Sorted Adjacent Differences(CodeForces - 1339B)【思维+贪心】

    B - Sorted Adjacent Differences(CodeForces - 1339B) 题目链接 算法 思维+贪心 时间复杂度O(nlogn) 1.这道题的题意主要就是让你对一个数组进 ...

  6. Codeforces 1073C:Vasya and Robot(二分)

    C. Vasya and Robot time limit per test: 1 secondmemory limit per test: 256 megabytesinput: standard ...

  7. Codeforces Round #768 (Div. 2) D. Range and Partition // 思维 + 贪心 + 二分查找

    The link to problem:Problem - D - Codeforces   D. Range and Partition  time limit per test: 2 second ...

  8. C. Vasya and Robot二分

    1.题目描述 Vasya has got a robot which is situated on an infinite Cartesian plane, initially in the cell ...

  9. 【CF1256】Codeforces Round #598 (Div. 3) 【思维+贪心+DP】

    https://codeforces.com/contest/1256 A:Payment Without Change[思维] 题意:给你a个价值n的物品和b个价值1的物品,问是否存在取物方案使得价 ...

随机推荐

  1. html5的download下载标签

    Html5的下载标签download <a href="files/1.jpg" download="1.jpg">Download</a&g ...

  2. (function($){...})(jQuery) 函数详解

    function(arg){...} 这是一个匿名函数,参数是arg. 而调用匿名函数时,是在函数后面写上括号和实参的,由于操作符的优先级,函数本身也需要用括号,即: function(arg){.. ...

  3. Android上传头像代码,相机,相册,裁剪

    activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...

  4. android 学习随笔二十二(小结)

    ADB进程 * adb指令 * adb install xxx.apk * adb uninstall 包名 * adb devices * adb start-server * adb kill-s ...

  5. 161115、MyBatis 通过包含的jdbcType类型

    MyBatis常用jdbcType类型 BIT         FLOAT      CHAR           TIMESTAMP       OTHER       UNDEFINEDTINYI ...

  6. M公司面试

    1.技术面 跟日历相关的,根据你联系人的时间,确定可以安排活动的时间 2.final面 你的项目经历,挑战,解决办法: 判断两个长方形,是否有重叠部分: 你的人生规划[这个很多公司都会问]

  7. 数32位 unsigned int中1的个数

    参考文章:http://www.cnblogs.com/graphics/archive/2010/06/21/1752421.html 最简单的方法: int BitCount0(unsigned ...

  8. POSIX字符类

    POSIX字符类需要用引号,或双括号[[]]括起来: [:alnum:]:匹配字面和数字字符.等同于A~Z,a~z,0~9 [:alpha:]:匹配字母字符.等同于A~Z,a~z [:blank:]: ...

  9. Centos7下用命令下载jdk7及jboss-eap-6

    计划在南非的一台云主机上搭建一个web环境,首先需要在云主机上搭建我们指定版本的JDK和JBOSS. 在云上搭特定版本的环境,软件包传输是一件十分艰巨的任务.我先后尝试了:公司电信专线.公司联通专线. ...

  10. layer

    一款实用的web提示框架!下面是实用这款框架的实例 html代码 <p class='layer_notice'>我们是否是好惹的</p> <input type=&qu ...