ZOJ 3381 Osaisen Choudai !
懒得朝硬盘的分类里放,存这了
RMQ;
const int sup = 50010; int dp[sup], s[sup], x[sup], y[sup]; struct node { int mmax, mmin;//分别记录所求区间最大最小值 }pz; int n; int big[sup][35], lit[sup][35];//2^31就是int的最大范围了,big[i][j]表示的是i到i+2^j-1范围内的最大值,所以int范围内j最大到32足够 int ary[sup]; inline int Max(int a, int b) { if(a > b) return a; return b; } void Update(int w)//更新w - > n区间的最大值 { big[w][0] = dp[w]; for(int i = 1; w + (1 << i) - 1 <= n; ++ i) big[w][i] = Max(big[w][i - 1], big[w + (1 << (i - 1)) ][i - 1]); } //区间最大值,正在为看不懂线段树发愁,LX一位牛爆料ST, //给不懂线段树的菜带来了福音 inline int RMQ(int st,int ed) { if(st > ed) return 0; if(ed > n) ed = n; int k = (int) (log((double)ed - st + 1) / log(2.0)); if(k < 0) return 0; return Max( big[st][k], big[ed - (1 << k) + 1][k] ); } int main() { while(~scanf("%d", &n)) { memset(big, 0, sizeof(big)); for(int i = 1; i <= n; ++ i) scanf("%d %d %d", s + i, x + i, y + i); for(int i = n; i > 0; -- i) { dp[i] = s[i] + RMQ(i + x[i], i + y[i] - 1); Update(i); } printf("%d/n", dp[1]); } return 0; }
裸搞:
const int sup = 50010; int dp[sup]; int s[sup], x[sup], y[sup]; int n; inline void MAX(int &a, int b) { if(a < b) a = b; } inline int Max(int i)//暴力枚举最优解 { int res = -1; for(int j = i + x[i]; j < i + y[i] && j <= n; ++ j) MAX(res, dp[j]); return res; } /*这个前面的决策可以影响后面的,所以dp的时候倒着推*/ //假设第i天要钱,那么最大收益就是来自未来的合法要钱天数内的某一天再次要钱,dp枚举这一天 //第i天所要钱币获得的最大收入:dp[i] = s[i] + max(dp[j + i], x[i] <= j < y[i]) int main() { while(~scanf("%d", &n)) { for(int i = 1; i <= n; ++ i) scanf("%d %d %d", s + i, x + i, y + i); for(int i = n; i > 0; -- i) dp[i] = s[i] + Max(i);//暴力枚举 printf("%d/n", dp[1] + 1); } return 0; }
ZOJ 3381 Osaisen Choudai !相关推荐
- zoj3381 Osaisen Choudai!
题意:忽略题目背景,就是要收集最多的钱, 如果第i天拿到了si 的钱, 那么第i+x[i] 天 到 第i + y[i] - 1 天必须再拿一次,否则就再也拿不到钱了,当然,第i +x[i]天之前也是拿 ...
- ZOJ 2723 Semi-Prime ||ZOJ 2060 Fibonacci Again 水水水!
两题水题: 1.如果一个数能被分解为两个素数的乘积,则称为Semi-Prime,给你一个数,让你判断是不是Semi-Prime数. 2.定义F(0) = 7, F(1) = 11, F(n) = F( ...
- zoj 1204 Additive equations
ACCEPT acm作业 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=204 因为老师是在集合那里要我们做这道题.所以我很是天 ...
- 【HDU/POJ/ZOJ】Calling Extraterrestrial Intelligence Again (素数打表模板)
http://poj.org/problem?id=1411 POJ http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=168 ...
- 模拟 ZOJ 3878 Convert QWERTY to Dvorak
题目传送门 1 /* 2 模拟:手敲map一一映射,累! 3 除了忘记读入字符串不能用gets用getline外还是很顺利的AC了:) 4 */ 5 #include <cstdio> 6 ...
- 矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence
题目传送门 1 /* 2 题意:加上适当的括号,改变计算顺序使得总的计算次数最少 3 矩阵连乘积问题,DP解决:状态转移方程: 4 dp[i][j] = min (dp[i][k] + dp[k+1] ...
- ZOJ 3597 Hit the Target! (线段树扫描线 -- 矩形所能覆盖的最多的点数)
ZOJ 3597 题意是说有n把枪,有m个靶子,每把枪只有一发子弹(也就是说一把枪最多只能打一个靶子), 告诉你第 i 把枪可以打到第j个靶, 现在等概率的出现一个连续的P把枪,在知道这P把枪之后,你 ...
- 九度OJ—题目1032:ZOJ
题目描写叙述: 读入一个字符串.字符串中包括ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出.当某个字符用完时,剩下的仍然依照ZOJ的顺序输出. 输入: 题目包括多组用例,每组用例占一行,包括ZOJ ...
- ZOJ 1410 题解
题目链接:http://acm.zju.edu.cn/show_problem.php?pid=1410 又是一道简单题,以前做过一次,结果放弃了,今天看了一下,觉得还是比较简单于是下手了. 题目的大 ...
最新文章
- 获得PMP证书的这一年
- 如何去掉桌面标签背影
- layui与eazyui的区别_jquery easyui和layui的区别是什么?
- Boost:传输文件的测试程序
- 十进制大数的加法运算
- Netty 中 IOException: Connection reset by peer 与 java.nio.channels.ClosedChannelException: null
- WPF中ContextMenu(右键菜单)使用Command在部分控件上默认为灰色的处理方法
- zouxy09博客原创性博文导航
- 000+0000 格式的时间转成 年月日
- Linux常用基本命令( rmdir, rm, mv )
- Python入门(一)-打开世界之Hello World
- 【物流选址】基于matlab节约算法求解考虑碳排放及带时间窗的物流选址问题【含Matlab源码 1589期】
- android字体设置
- C语言练习实例——费氏数列
- linux 执行程序时,提示not found问题分析
- 网页报404解决办法
- hdu3182 状态压缩水题
- jQuery绚丽霓虹灯文字特效
- mac系统安装手机安装包
- 由于找不到vcruntime140_1.dll,无法继续执行代码重新安装程序可能会解决此问题
热门文章
- 模拟测静电场实验报告
- 为什么要使用二级指针?
- 利用java输出一个月的日历表
- 「津津乐道播客」#197. 拼娃时代:聊聊帝都拼娃史
- oracle 注册表丢了,一次Windows 注册表中注册表项目丢失导致的Oracle 数据库启动有关问题...
- 2021国开计算机应用基础形考任务答案,2021电大计算机应用基础形考试题答案解析.doc...
- 【洛谷P1462】通往奥格瑞玛的道路
- 用el-select处理后台数据进行页面渲染,返回数据如果为空或者无法渲染文字时的处理
- H5 水平居中 水平垂直居中
- linux组权限管理,Linux组管理和权限管理