[Codeforces 922E]Birds
Description
一条直线上有 \(n\) 棵树,每棵树上有 \(c_i\) 只鸟,在一棵树底下召唤一只鸟的魔法代价是 \(cost_i\) 每召唤一只鸟,魔法上限会增加 \(B\) 。从一棵树走到另一棵树,会增加魔法 \(X\) ,一开始的魔法和魔法上限都是 \(W\) 。问最多能够召唤的鸟的个数。
\(1\leq n\leq 1000,1\leq B,X,W\leq 10^9,1\leq \sum_{i=1}^n c_i\leq 10000\)
Solution
容易想到记 \(f_{i,j}\) 为第 \(i\) 棵树时,召唤了 \(j\) 只鸟,剩余魔法的最大值。
转移的话就是枚举 \(j-c_i\) 范围内的上一棵树的最大值。
但这样复杂度似乎不太漂亮,考虑用单调队列优化,一个显然的“滑动窗口”模型。复杂度为 \(O(n\sum c)\) 的。
Code
#include <bits/stdc++.h>
using namespace std;
const int N = 1000, C = 10000;
long long f[N+5][C+5], n, w, b, x, c[N+5], cost[N+5], tolc;
int q[C+5], head, tail; bool v[N+5][C+5];
void work() {
scanf("%I64d%I64d%I64d%I64d", &n, &w, &b, &x);
for (int i = 1; i <= n; i++) scanf("%I64d", &c[i]), tolc += c[i];
for (int i = 1; i <= n; i++) scanf("%I64d", &cost[i]);
f[0][0] = w; v[0][0] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= tolc; j++) f[i-1][j] = min(f[i-1][j]+x, w+b*j);
head = tail = 0;
for (int j = 0; j <= tolc; j++) {
if (v[i-1][j]) {
while (head < tail && f[i-1][q[tail-1]]+cost[i]*q[tail-1] <= f[i-1][j]+cost[i]*j) --tail;
q[tail++] = j;
}
while (head < tail && j-q[head] > c[i]) ++head;
if (head < tail && f[i-1][q[head]]+cost[i]*q[head]-cost[i]*j >= 0)
f[i][j] = f[i-1][q[head]]+cost[i]*q[head]-cost[i]*j, v[i][j] = 1;
}
}
int ans = 0;
for (int i = 0; i <= tolc; i++) if (v[n][i]) ans = i;
printf("%d\n", ans);
}
int main() {work(); return 0; }
[Codeforces 922E]Birds的更多相关文章
- CodeForces - 922E Birds —— DP
题目链接:https://vjudge.net/problem/CodeForces-922E E. Birds time limit per test 1 second memory limit p ...
- 2018.12.14 codeforces 922E. Birds(分组背包)
传送门 蒟蒻净做些水题还请大佬见谅 没错这又是个一眼的分组背包. 题意简述:有n棵树,每只树上有aia_iai只鸟,第iii棵树买一只鸟要花cic_ici的钱,每买一只鸟可以奖励bbb块钱,从一棵 ...
- [总结]一些 DP 优化方法
目录 注意本文未完结 写在前面 矩阵快速幂优化 前缀和优化 two-pointer 优化 决策单调性对一类 1D/1D DP 的优化 \(w(i,j)\) 只含 \(i\) 和 \(j\) 的项--单 ...
- Codeforces 922 E Birds (背包dp)被define坑了的一题
网页链接:点击打开链接 Apart from plush toys, Imp is a huge fan of little yellow birds! To summon birds, Imp ne ...
- [Codeforces Round #461 (Div2)] 题解
[比赛链接] http://codeforces.com/contest/922 [题解] Problem A. Cloning Toys [算法] 当y = 0 , 不可以 当 ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
- 【Codeforces 738A】Interview with Oleg
http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...
随机推荐
- 宝塔Linux面板命令大全
安装宝塔 Centos安装脚本 yum install -y wget && wget -O install.sh http://download.bt.cn/install/inst ...
- Java连接mysql——Establishing SSL connection without server's identity verification is not recommended.
Establishing SSL connection without server's identity verification is not recommended. 出现这个错误的原因是因为m ...
- 第1次作业:no blog no fun
1.先回答老师的问题 第一部分:结缘计算机 读了进入2012 -- 回顾我走过的编程之路后,我试着回顾了我的编程生涯的开始.我最原始的记忆就是老爸教我用电脑玩连连看,那时候的显示器应该是C ...
- Java暑假作业
一.电影观后感 电影<摔跤吧!爸爸>观后感 二.下学期的计划与目标 大一学年总结: 参与了大大小小的学院活动,例如机器人搭建.辩论赛,也参加了学生会的部门,参与了组织活动.通过参与活动获 ...
- django + nginx + uwsgi + websocket
最近使用django框架做了一个简单的聊天机器人demo, 开发的过程中使用了django自带的websocket模块,当使用django框架自带的wsgi服务去启动的话,没有什么问题.如果要使用uw ...
- it's a big trick
今天,正式的登上了我注册已久的博客园,最初注册园子得出发点是记录生活点滴和学习工作的心得的,那就不忘初心,从头开始吧. 从校园到工作,从东北到南方 我们毕业啦 谁说毕业遥遥无期,转眼就要各奔东西. 是 ...
- Python-进程与线程理论基础-Day10
进程与线程理论基础 1.背景知识 理论基础: 一 操作系统的作用: 1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口 2:管理.调度进程,并且将多个进程对硬件的竞争变得有序 二 多道技术: 1.产生背景 ...
- Struts2 之值栈
值栈(ValueStack) http://www.cnblogs.com/bgzyy/p/8639893.html 这是我的有关 struts2 的第一篇文章,对于里面我们说到的一个 struts2 ...
- 【原生js实现一键回到顶部】
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- Python入门之迭代器/生成器/yield的表达方式/面向过程编程
本章内容 迭代器 面向过程编程 一.什么是迭代 二.什么是迭代器 三.迭代器演示和举例 四.生成器yield基础 五.生成器yield的表达式形式 六.面向过程编程 ================= ...