holiday.pas/c/cpp

Description

经过几个月辛勤的工作,FJ 决定让奶牛放假。假期可以在1…N 天内任意选择一段(需要连

续),每一天都有一个享受指数W。但是奶牛的要求非常苛刻,假期不能短于P 天,否则奶

牛不能得到足够的休息;假期也不能超过Q 天,否则奶牛会玩的腻烦。FJ 想知道奶牛们能

获得的最大享受指数。

Input(holiday.in)

第一行:N,P,Q.

第二行:N 个数字,中间用一个空格隔开。

Output(holiday.out)

一个整数,奶牛们能获得的最大享受指数。

Sample Input

5 2 4

-9 -4 -3 8 -6

Sample Output

5

Limitation

time:1s

memory:65536kb

50% 1≤N≤10000

100% 1≤N≤100000

1<=p<=q<=n

Hint

选择第3-4 天,享受指数为-3+8=5。

****把每一个区间的享受指数都存到一个二维数组里面,然后根据要求的最短天数和最长天数的区间进行循环,如果比上一个存的数值大的话就更换,最后输出最大值

 #include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<cstring>
#include<cctype>
using namespace std;
typedef long long ll;
#define enter printf("\n")
const int maxn = 1e5 + ;
const int INF = 0x3f3f3f3f;
inline ll read()
{
ll ans = ;
char ch = getchar(), last = ' ';
while(!isdigit(ch)) {last = ch; ch = getchar();}
while(isdigit(ch))
{
ans = ans * + ch - ''; ch = getchar();
}
if(last == '-') ans = -ans;
return ans;
}
inline void write(ll x)
{
if(x < ) {putchar('-'); x = -x;}
if(x == ) {putchar(''); return;}
int q[], N = ;
q[] = ;
while(x) {q[++N] = x % ; x /= ;}
while(N) {putchar('' + q[N]); --N;}
} //忽略掉优化 int n, l, r;
ll a[maxn], sum[maxn];
ll ans = (ll)-INF * INF; ll dp[maxn][];
int size[maxn];
void RMQ(int n)
{
for(int i = ; i <= n; ++i)
dp[i][] = sum[i];
for(int j = ; ( << j) <= n; ++j)
for(int i = ; i + ( << j) - <= n; ++i)
dp[i][j] = max(dp[i][j - ], dp[i + ( << (j - ))][j - ]);
int k = ;
for(int i = ; i <= n; ++i)
{
if (( << k) <= i) k++;
size[i] = k - ;//求长度j
}
}
ll query(int L, int R)
{
int k = size[R - L + ];
return max(dp[L][k], dp[R - ( << k) + ][k]);
}
int main()
{
freopen("holiday.in", "r", stdin);
freopen("holiday.out", "w", stdout);
n = read(); l = read(); r = read();
for(int i = ; i <= n; ++i)
{
a[i] = read();
sum[i] = sum[i - ] + a[i];
} //求前缀和
RMQ(n);
for(int i = ; i <= n - l; ++i)
{
int L = i + l, R = i + r;
if(R > n) R = n;
ll _ans = query(L, R) - sum[i];
ans = max(ans, _ans);
}
write(ans); enter;
return ;
}

****首先感谢绿镜小哥哥(詹宜瑞童鞋)对女生的讲解。。。。

这道题可以先思考如果就是从第一天放假那么就是求【1,l】【1,r】之间的最大值

过渡到这道题可以枚举某一天为第一天。。相应的应该把真正的第一天到这个假的第一天之间的数值减去。

这道题用RMQ,特地还去翻了下他的博客,有个图看起来还不错

holiday的更多相关文章

  1. 【UOJ #29】【IOI 2014】holiday

    http://uoj.ac/problem/29 cdq四次处理出一直向左, 一直向右, 向左后回到起点, 向右后回到起点的dp数组,最后统计答案. 举例:\(fi\)表示一直向右走i天能参观的最多景 ...

  2. 水题 ZOJ 3876 May Day Holiday

    题目传送门 /* 水题:已知1928年1月1日是星期日,若是闰年加1,总天数对7取余判断就好了: */ #include <cstdio> #include <iostream> ...

  3. zoj The 12th Zhejiang Provincial Collegiate Programming Contest May Day Holiday

    http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5500 The 12th Zhejiang Provincial ...

  4. 第十二届浙江省大学生程序设计大赛-May Day Holiday 分类: 比赛 2015-06-26 14:33 10人阅读 评论(0) 收藏

    May Day Holiday Time Limit: 2 Seconds Memory Limit: 65536 KB As a university advocating self-learnin ...

  5. HDU 4118 Holiday's Accommodation

    Holiday's Accommodation Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 200000/200000 K (Jav ...

  6. hdoj 1827 Summer Holiday【强连通分量&&缩点】

    Summer Holiday Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  7. HDU 4118 树形DP Holiday's Accommodation

    题目链接:  HDU 4118 Holiday's Accommodation 分析: 可以知道每条边要走的次数刚好的是这条边两端的点数的最小值的两倍. 代码: #include<iostrea ...

  8. Summer Holiday(强联通入度最小点)

    Summer Holiday Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  9. IOI2014 day2 task4 Holiday

    题目 题目链接 大意:从左到右有\(n\)个城市,一开始在城市\(start\),每一天有两种选择: 前往相邻的城市. 访问当前城市(每个城市只能访问一次),访问城市\(i\)可以获得\(attrac ...

  10. May Day Holiday

    Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Submit Status Practic ...

随机推荐

  1. HDU 5143 NPY and arithmetic progression(思维)

    http://acm.hdu.edu.cn/showproblem.php?pid=5143 题意: 给定数字1,2,3,4.的个数每个数字能且仅能使用一次,组成多个或一个等差数列(长度大于等于3), ...

  2. 【ATcoder】D - Half Reflector

    题目链接:http://agc011.contest.atcoder.jp/tasks/agc011_d 每次都是两道题惨啊.... 想了想大概做法,既然小球走过去就会导致装置变化?那么是不是有一点像 ...

  3. Javascript中点击(click)事件的3种写法

    方法一 <!DOCTYPE html> <html> <head> <title>Javascript中点击事件方法一</title> &l ...

  4. NativeWindow_01_CreateWindow(Ex)_VC6

    1. #include <windows.h> LRESULT CALLBACK ProcWindow(HWND hwnd, UINT uMsg, WPARAM wParam, LPARA ...

  5. Asp.net core 学习笔记 ( Web Api )

    asp.net core 把之前的 webapi 和 mvc 做了结合. mvc 既是 api. 但是后呢,又发现, api 确实有独到之处,所以又开了一些补助的方法. namespace Proje ...

  6. SQLSERVER 和 ORACLE的if not exist 用法

    sql server: if not exists (select 1 from TB_Procedure where Id='2018ZZZ') BEGIN insert into TB_Proce ...

  7. 通过 rufus 创建启动U盘,安装 VMWare Esxi

    现在谁还用光盘安装系统啊. 做出启动盘后,U盘启动进行安装才是王道. https://www.starwindsoftware.com/blog/create-an-esxi-6-5-installa ...

  8. JavaScript 第一章总结

    A quick dip into javascipt The way JavaScript works HTML 用一系列的 markup 来呈现整个 content 的 structure.CSS ...

  9. 20181013xlVba据成绩条生成图片文件

    Sub CreateGoalPictures() '声明变量 Dim Wb As Workbook Dim Sht As Worksheet Dim Shp As Shape Dim Pic, End ...

  10. KM算法 带权二分匹配 O(n^3)

    #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #inclu ...