codeforces 629D. Babaei and Birthday Cake】的更多相关文章

题目链接 大意就是给出一个序列, 然后让你从中找出一个严格递增的数列, 使得这一数列里的值加起来最大. 用线段树, 先将数列里的值离散,然后就是线段树单点更新, 区间查询最值. 具体看代码. #include <iostream> #include <vector> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include &…
题意: 线段树做法 分析: 因为每次都是在当前位置的前缀区间查询最大值,所以可以直接用树状数组优化.比线段树快了12ms~ 代码: #include<cstdio> #include<cmath> #include<iostream> #include<algorithm> using namespace std;//[) const int maxn = 100005, INF = 0x3fffffff; #define pi acos(-1.0) typ…
题意: n个蛋糕编号从小到大编号,j号蛋糕可以放在i号上面,当且仅当j的体积严格大于i且i<j,问最终可得的最大蛋糕体积. 分析: 实质为求最长上升子序列问题,设dp[i]从头开始到第i位的最长子序列长度,可以想到O(n2)的做法,状态转移方程: dp[i] = max(dp[j], j >= 0 && j < i && v[j] < v[i]) + v[i]; 但是n可达1e5,这样做会超时... 那么如何快速的获取满足v[j]小于v[i]的最大的…
题目:http://codeforces.com/contest/629/problem/D 题意:有n个蛋糕要叠起来,能叠起来的条件是蛋糕的下标比前面的大并且体积也比前面的大,问能叠成的最大体积 思路:DP[i]表示拿到第i个蛋糕时最多能叠成的体积,转移就是这样DP[i]=max(DP[1...i])+V[i];如果直接做的话复杂度是n^2的,用线段树维护比它小的蛋糕的能叠的最大体积,事先离散化, #include <cstdio> #include <cstring> #inc…
题意:给定n个圆柱体的半径和高,输入顺序即圆柱体的编号顺序.现在规定,只有编号和体积均大于另一个圆柱体,才能放到另一个圆柱体的体积上面.求能叠加的最大体积是多少. 酝酿了我三天,才理解.自己敲个代码,还超时了,但是把思路记录一下吧,实在不知道哪里超时了. 思路:dp+线段树维护.本质是求递增序列的最大和.设dp[i]表示以编号为i的圆柱体为顶部的圆柱.大问题拆分成子问题:dp[i]=max(dp[j])  +  v[i] ,j表示可以放在i号圆柱体下的合法圆柱体,即体积和编号均小于 i .但是如…
D. Babaei and Birthday Cake time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output As you know, every birthday party has a cake! This time, Babaei is going to prepare the very special birthday pa…
D. Babaei and Birthday Cake 题目连接: http://www.codeforces.com/contest/629/problem/D Description As you know, every birthday party has a cake! This time, Babaei is going to prepare the very special birthday party's cake. Simple cake is a cylinder of som…
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output As you know, every birthday party has a cake! This time, Babaei is going to prepare the very special birthday party's cake. Simple cake is a cyl…
题意:做蛋糕,给出N个半径,和高的圆柱,要求后面的体积比前面大的可以堆在前一个的上面,求最大的体积和. 思路:首先离散化蛋糕体积,以蛋糕数量建树建树,每个节点维护最大值,也就是假如节点i放在最上层情况下的体积最大值dp[i].每次查询比蛋糕i小且最大体积的蛋糕,然后更新线段树.注意此题查询的技巧!!查询区间不变l,r,才能保证每次查到的是小且最大体积. #include<iostream> #include<string> #include<algorithm> #in…
题意:n个圆柱形蛋糕,给你半径 r 和高度 h,一个蛋糕只能放在一个体积比它小而且序号小于它的蛋糕上面,问你这样形成的上升序列中,体积和最大是多少 分析:根据他们的体积进行离散化,然后建树状数组,按照序号进行循环,每次查询体积比它小的蛋糕形成的最大体积 注:因为是按照序号进行循环,所以序号一定是严格小于它的,时间复杂度O(nlogn) #include <iostream> #include <cstdio> #include <algorithm> using nam…