题目链接:http://codeforces.com/problemset/problem/441/B

题目意思:有 n 棵fruit trees,每课水果树有两个参数描述:水果成熟的时间和这棵树上水果的数量。已知Valera 每天最多可以采摘 v 个水果,而每棵fruit tree能被采摘水果的天数只能在它水果成熟的那一日(ai)和后一日(ai+1),超过这两日就不能采摘这棵树的水果了。问如何操作可以使最后采摘到的水果数最多。

实不相瞒,做这条题做得蛮久的,可能与忙于考试没怎么做题有关.....开始时候还想得比较复杂......

由于可能有多棵fruit trees成熟的天数是一样的,那么可以将这些成熟的日子相同的fruit tree归为一类。即 1 5;   1 3;  1 6  ——>  1  14,代表第1天~第2天能采摘的水果数是55个。此时另一个问题出现了,如果对于 2 2;2 4; 2 5(第2天~第3天能够采摘),而Valera 每天能采摘的水果数是v = 8,那么结合上面的数据来考虑,就会发觉,当第二天的时候,他需要把剩余的第一天成熟的水果:6个 + 第二天成熟的水果:2个 都采摘才是当天能采摘水果数的最优方案。所以前一天的水果数也需要考虑。也就是类似当达到第二天的时候,要看看第一天是否有剩余未采摘的水果。

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std; const int maxn = ;
int tree[maxn]; int main()
{
int n, v;
while (scanf("%d%d", &n, &v) != EOF)
{
int ripen_day, num_of_fruit, max_day = ;
memset(tree, , sizeof(tree));
for (int i = ; i < n; i++)
{
scanf("%d%d", &ripen_day, &num_of_fruit);
tree[ripen_day] += num_of_fruit; // 第ripen_day中最多能采摘到的水果数
max_day = max(max_day, ripen_day); // 求出所有树中水果最迟成熟的日子
} int ans = ;
for (int i = ; i <= max_day+; i++) // max_day+1表示那棵水果最迟成熟的日子能偶在max_day和max_day+1中采摘
{
int tv = v; // 每天最多能够采摘的水果数量
if (tree[i-]) // 前一天是否有剩余水果未采摘
{
if (tree[i-] < tv)
{
ans += tree[i-];
tv -= tree[i-]; // 第i天最多能采摘tv个水果
}
else
{
tree[i-] -= tv;
ans += tv;
tv = ;
}
}
if (tree[i] < tv)
{
ans += tree[i];
tree[i] = ;
}
else
{
ans += tv;
tree[i] -= tv;
}
}
printf("%d\n", ans);
}
return ;
}

codeforces 441B. Valera and Fruits 解题报告的更多相关文章

  1. codeforces B. Valera and Contest 解题报告

    题目链接:http://codeforces.com/problemset/problem/369/B 题目意思:给出6个整数, n, k, l, r, sall, sk ,需要找出一个满足下列条件的 ...

  2. codeforces 441C. Valera and Tubes 解题报告

    题目链接:http://codeforces.com/problemset/problem/441/C 题目意思:将n * m 的矩阵分成 k 堆.每堆是由一些坐标点(x, y)组成的.每堆里面至少由 ...

  3. Codeforces Educational Round 92 赛后解题报告(A-G)

    Codeforces Educational Round 92 赛后解题报告 惨 huayucaiji 惨 A. LCM Problem 赛前:A题嘛,总归简单的咯 赛后:A题这种**题居然想了20m ...

  4. codeforces 476C.Dreamoon and Sums 解题报告

    题目链接:http://codeforces.com/problemset/problem/476/C 题目意思:给出两个数:a 和 b,要求算出 (x/b) / (x%b) == k,其中 k 的取 ...

  5. Codeforces Round #382 (Div. 2) 解题报告

    CF一如既往在深夜举行,我也一如既往在周三上午的C++课上进行了virtual participation.这次div2的题目除了E题都水的一塌糊涂,参赛时的E题最后也没有几个参赛者AC,排名又成为了 ...

  6. Codeforces Round #252 (Div. 2) 441B. Valera and Fruits

    英语不好就是坑啊.这道题把我坑残了啊.5次WA一次被HACK.第二题得分就比第一题高10分啊. 以后一定要加强英语的学习,要不然就跪了. 题意:有一个果园里有非常多树,上面有非常多果实,为了不然成熟的 ...

  7. codeforces 507B. Amr and Pins 解题报告

    题目链接:http://codeforces.com/problemset/problem/507/B 题目意思:给出圆的半径,以及圆心坐标和最终圆心要到达的坐标位置.问最少步数是多少.移动见下图.( ...

  8. codeforces 500B.New Year Permutation 解题报告

    题目链接:http://codeforces.com/problemset/problem/500/B 题目意思:给出一个含有 n 个数的排列:p1, p2, ..., pn-1, pn.紧接着是一个 ...

  9. codeforces B. Xenia and Ringroad 解题报告

    题目链接:http://codeforces.com/problemset/problem/339/B 题目理解不难,这句是解题的关键 In order to complete the i-th ta ...

随机推荐

  1. SQLite数据库相关操作

    一.创建数据库 这里创建了note便签数据表,字段有noteId.noteTitle.noteTime.noteInfo );  // TODO Auto-generated constructor ...

  2. Redis命令行之Set

    一.Redis之Set简介 1. Set是String类型的无序集合(元素成员唯一). 2. Set是通过hash表实现的,添加.删除.查找的复杂度都是O(1). 3. 每个集合最大成员数为232-1 ...

  3. 最小费用最大流粗解 poj2516

    最小费用最大流,一般解法如下: 在流量基础上,每条边还有权费用,即单位流量下的所需费用.在最大流量下,求最小费用.解法:在最大流算法基础上,每次按可行流增广改为每次用spfa按最小费用(用单位费用)增 ...

  4. bzoj 5216: [Lydsy2017省队十连测]公路建设

    5216: [Lydsy2017省队十连测]公路建设 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 66  Solved: 37[Submit][St ...

  5. DBA总结

    HA MHA(1)从宕机崩溃的master保存二进制日志事件(binlog events);(2)识别含有最新更新的slave:(3)应用差异的中继日志(relay log)到其他的slave:(4) ...

  6. 【mac】mac上安装软件,报错 鉴定错误,但是安装包都是好的

    出现这个问题, 原因解析: 不是你的安装包下载出错了或者下载失败了这种原因 而是你在打开这个安装包的时候,一定是让你输入密码,而你的密码没有输入正确 解决方式:重新开始打开这个软件的安装包 如下: 1 ...

  7. 创建es索引-格式化和非格式化

    创建es索引-格式化和非格式化 学习了:https://www.imooc.com/video/15768 索引有结构化和非结构化的区分: 1, 先创建索引,然后POST修改mapping 首先创建索 ...

  8. IntelliJ IDEA 默认需要进行maven的设置

    IntelliJ IDEA 默认需要进行maven的设置 需要指定maven的地址,指定settings.xml的地址: 可以默认的在user/.m2/下面放一个settings.xml文件: 学习: ...

  9. 全志a13开发总结

    这几天因为工作的原因,開始接触全志a13芯片,本人在网上搜集了好长时间,可是网上的资料对这方面的描写叙述是很少的, 所以,仅仅能靠数据手冊还有官网上面的英文文档进行开发了,下面仅仅是开发中的非常少的一 ...

  10. time machine不备份指定文件夹

    osx中常常会使用timemachine来备份一些文件,timemachine能够使某个文件夹恢复到之前某个时刻的状态,很的方便.但是备份须要空间,特别是有些我们并不想备份一些无关紧要的文件,比方电影 ...