codeforces 441B. Valera and Fruits 解题报告
题目链接: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 解题报告的更多相关文章
- codeforces B. Valera and Contest 解题报告
题目链接:http://codeforces.com/problemset/problem/369/B 题目意思:给出6个整数, n, k, l, r, sall, sk ,需要找出一个满足下列条件的 ...
- codeforces 441C. Valera and Tubes 解题报告
题目链接:http://codeforces.com/problemset/problem/441/C 题目意思:将n * m 的矩阵分成 k 堆.每堆是由一些坐标点(x, y)组成的.每堆里面至少由 ...
- Codeforces Educational Round 92 赛后解题报告(A-G)
Codeforces Educational Round 92 赛后解题报告 惨 huayucaiji 惨 A. LCM Problem 赛前:A题嘛,总归简单的咯 赛后:A题这种**题居然想了20m ...
- codeforces 476C.Dreamoon and Sums 解题报告
题目链接:http://codeforces.com/problemset/problem/476/C 题目意思:给出两个数:a 和 b,要求算出 (x/b) / (x%b) == k,其中 k 的取 ...
- Codeforces Round #382 (Div. 2) 解题报告
CF一如既往在深夜举行,我也一如既往在周三上午的C++课上进行了virtual participation.这次div2的题目除了E题都水的一塌糊涂,参赛时的E题最后也没有几个参赛者AC,排名又成为了 ...
- Codeforces Round #252 (Div. 2) 441B. Valera and Fruits
英语不好就是坑啊.这道题把我坑残了啊.5次WA一次被HACK.第二题得分就比第一题高10分啊. 以后一定要加强英语的学习,要不然就跪了. 题意:有一个果园里有非常多树,上面有非常多果实,为了不然成熟的 ...
- codeforces 507B. Amr and Pins 解题报告
题目链接:http://codeforces.com/problemset/problem/507/B 题目意思:给出圆的半径,以及圆心坐标和最终圆心要到达的坐标位置.问最少步数是多少.移动见下图.( ...
- codeforces 500B.New Year Permutation 解题报告
题目链接:http://codeforces.com/problemset/problem/500/B 题目意思:给出一个含有 n 个数的排列:p1, p2, ..., pn-1, pn.紧接着是一个 ...
- codeforces B. Xenia and Ringroad 解题报告
题目链接:http://codeforces.com/problemset/problem/339/B 题目理解不难,这句是解题的关键 In order to complete the i-th ta ...
随机推荐
- Java 模板权重随机
Template templates=...// 所有的模板 final int _weights=1000; // 所有的模板权重 Template _template=null; //随机一个权重 ...
- MyBatis的参数,不能传入null
今天在调试的过程中发现一个bug,把传入的参数写到查询分析器中执行没有问题,但是在程序中执行就报错:org.springframework.jdbc.UncategorizedSQLException ...
- webstorm(二):拼写warning
逼死强迫症之对拼写进行检查,警告 typo:in word “msgfromfather”
- codevs 2964公共素数因数
2964 公共素数因数 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 小单同学刚学习了一个数分解成几个素 ...
- Spring实战Day6
3.4 bean的作用域 Spring中bean的作用域 单例(Singleton):在整个应用中,只创建bean的一个实例. 原型(Prototype):每次注入或者通过Spring应用上下文获取的 ...
- Java下接口interface前面要不要加I
说明:加I和不加I都可以,看需要,没有强制要求. 在Java中更多是提倡不加I的,可以看下JDK的源码,都是不加I的. 微软C#是规定要加I,这也是影响从而导致有这个话题的原因. Java中特定不直接 ...
- Spring MVC集成Spring Data Reids和Spring Session实现Session共享
说明:Spring MVC中集成Spring Data Redis和Spring Session时版本是一个坑点,比如最新版本的Spring Data Redis已经不包含Jedis了,需要自行引入. ...
- Java日志框架-Spring中使用Logback(Spring/Spring MVC)
继上一篇文章http://www.cnblogs.com/EasonJim/p/7800880.html中所集成的是基于Java的普通项目,如果要在Spring和Spring MVC上集成,需要做如下 ...
- 【java】java base64编码与解码
参考地址:http://blog.csdn.net/zhou_kapenter/article/details/62890262 要求:JDK1.8+ 使用java原生工具类即可实现 [这里展示字符串 ...
- 若菜acmer感觉自己智商全然被碾压了QAQ~~
题目大意是:输入n,m,给出n*m(n.m<=100)的不是正规的布满棋子的棋盘,求最少改几个棋子能够使得棋盘正规,正规的棋盘必须是每一个相邻的棋子颜色都不同(仅仅有黑白两种,用0,1取代) 比 ...