ZOJ 3381 dp
来源:互联网 发布:tensorflow 3dcnn 编辑:程序博客网 时间:2024/06/07 02:41
题目大意:有个妹子,天天要钱,如果今天要了钱,那么她只能在接下来的x天后,y天内要钱,问最多要多少。。。。
题目思路:dp无误,具体过程中本渣渣还是不太顺利 = =,从前往后推不太好推,于是从后往前
用RMQ求区间最大值。。差不多都忘光了。。
代码:
#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 50010;int s[maxn], x[maxn], y[maxn];int st[maxn][20], dp[maxn];int n;int query(int l, int r){ if(l > r) return 0; int x = 0; while((1<<(x+1)) <= (r - l + 1)) x++; return max(st[l][x], st[r-(1<<x)+1][x]);}void update(int x){ st[x][0] = dp[x]; for(int i = 1; x + (1<<i) - 1 <= n;i ++) st[x][i] = max(st[x][i-1], st[x+(1<<(i-1))][i-1]); return ;}int main(){ while(~scanf("%d", &n)){ memset(dp,0,sizeof(dp)); for(int i = 1; i <= n;i ++){ scanf("%d%d%d",&s[i],&x[i],&y[i]); x[i] = i + x[i]; y[i] = min(i + y[i] - 1, n); } for(int i = n; i >= 1;i --){ dp[i] = s[i] + query(x[i], y[i]); update(i); } printf("%d\n", dp[1]); } return 0;}
0 0
- zoj 3381(DP+RMQ)
- ZOJ 3381 dp
- zoj 1149 双向dp
- zoj 2402 简单dp
- zoj 2744 DP做法
- zoj 2704 dp
- zoj 1738 dp
- zoj 1027 dp
- zoj 2401 dp
- zoj 3502 Contest //dp
- zoj 1558【DP】
- 【DP】ZOJ 2068
- 树形DP zoj 3527
- ZOJ 3463 DP
- ZOJ-1544 字符串DP
- zoj 1027 简单dp
- ZOJ 2042 Divisibility (DP)
- zoj 3582 概率dp
- POMM-week1
- 三层架构
- android界面的measure详解
- Ubuntu查看系统位数及版本
- Swift语言语法(运算符)
- ZOJ 3381 dp
- tinyxml入门学习
- jar包压缩与解压
- java反射调用对象方法
- 1.13和1.14
- mave的依赖范围
- js一些小技巧 3
- Dijkstra 算法实现及问题
- 算法学习 - 递归与非递归,位运算与乘除法速度比较