题目地址:

http://fzoj.xndxfz.com/JudgeOnline/problem.php?id=2146&csrf=17peCLMJM49glhqlg9KaD7Agf5o5QY87

题目描述:

在幻想乡,琪露诺是以笨蛋闻名的冰之妖精。某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来。但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸。于是琪露诺决定到河岸去追青蛙。小河可以看作一列格子依次编号为0到N,琪露诺只能从编号小的格子移动到编号大的格子。而且琪露诺按照一种特殊的方式进行移动,当她在格子i时,她只会移动到i+L到i+R中的一格。你问为什么她这么移动,这还不简单,因为她是笨蛋啊。每一个格子都有一个冰冻指数A[i],编号为0的格子冰冻指数为0。当琪露诺停留在那一格时就可以得到那一格的冰冻指数A[i]。琪露诺希望能够在到达对岸时,获取最大的冰冻指数,这样她才能狠狠地教训那只青蛙。但是由于她实在是太笨了,所以她决定拜托你帮它决定怎样前进。开始时,琪露诺在编号0的格子上,只要她下一步的位置编号大于N就算到达对岸。

输入格式:

第 1 行: 3 个正整数 N, L, R
第 2 行: N+1 个整数,第 i 个数表示编号为 i-1 的格子的冰冻指数 A[i-1]

输出格式:

第 1 行:一个整数,表示最大冰冻指数。保证不超过 2^31-1
第 2 行:空格分开的若干个整数,表示琪露诺前进的路线,最后输出-1 表示到达对岸

输入样例:

5 2 3
0 12 3 11 7 -2

输出样例:

11
0 3 -1

数据范围:

对于 60%的数据: N <= 10,000
对于 100%的数据: N <= 200,000
对于所有数据 -1,000 <= A[i] <= 1,000 且 1 <= L <= R <= N

题解:

题目大意我就不多说了,看到这道题可以想到DP,状态转移方程式也不难想出:
f[j]=max(f[k]+a[j],f[j])(j-r<=k<=j-l)
因为需要求一个区间中最大的点,如果选择N的时间扫一遍肯定会爆,所以我们需要使用线段树来维护一个区间中的最大节点的值。大概就这样,有一点需要注意的是数组的范围至少要比N的最大值大6000,不然最后一组数据会爆。下面贴代码吧。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ls l,mid,rt<<1
#define rs mid+1,r,rt<<1|1
using namespace std;
const int N=200005;
int tree[N<<2],n,l,r,f[N<<1],a[N<<1];
void pushup(int rt)
{tree[rt]=max(tree[rt<<1],tree[rt<<1|1]);
}
void build(int k,int num,int l,int r,int rt)
{if(l==r&&l==k){tree[rt]=num;return ;}int mid=(l+r)>>1;if(k<=mid) build(k,num,ls);else build(k,num,rs);pushup(rt);
}
void Init()
{memset(f,0,sizeof(f));memset(tree,0xaf,sizeof(tree));memset(a,0,sizeof(a));scanf("%d%d%d",&n,&l,&r);for(int i=0;i<=n;i++){scanf("%d",&a[i]);}
}
int query(int le,int ri,int l,int r,int rt)
{if(le<=l&&ri>=r){return tree[rt];}int mid=(l+r)>>1;if(ri<=mid){return query(le,ri,ls);}if(le>mid){return query(le,ri,rs);}if(le<=mid&&ri>mid){return max(query(le,mid,ls),query(mid+1,ri,rs));}
}
void dfs(int k)
{if(k==0){printf("0 ");return ;}for(int i=max(k-r,0);i<=k-l;i++){if(f[i]+a[k]==f[k]){int t1=a[i],t2=f[i];dfs(i);break;}}if(k>=n){printf("-1");return ;}printf("%d ",k);return ;
}
void work()
{f[0]=a[0];build(0,f[0],0,n+r,1);for(int i=l;i<=n+r;i++){f[i]=query(max(0,i-r),i-l,0,n+r,1)+a[i];build(i,f[i],0,n+r,1);}int maxn=0,ord;for(int i=n;i<=n+r;i++){if(f[i]>maxn){maxn=f[i];ord=i;}}printf("%d\n",maxn);dfs(ord);
}
int main()
{Init();work();return 0;
}

东方幻想乡系列模拟赛T2琪露诺题解相关推荐

  1. 【东方幻想乡系列模拟赛 Stage 4】 河城荷取

    Description 在幻想乡,河城荷取是擅长高科技工业的河童.荷取的得意之作除了光学迷彩外,还有震动整个幻想乡的巨型人形『非想天则』.不过由于人形太过巨大,所以为它充能是一件很麻烦的事.人形一共有 ...

  2. codevs1376帕秋莉•诺蕾姬 东方幻想乡系列模拟赛Stage 2[三星]

    题目很老但是很经典~ 题目链接:-------------->题目地址 题目描述 Description 在幻想乡,帕秋莉•诺蕾姬是以宅在图书馆闻名的魔法使.这一天帕秋莉又在考虑如何加强魔法咒语 ...

  3. [wikioi 1418]铃仙•优昙华院稻叶(东方幻想乡系列模拟赛)(树上递推)

    题目:http://www.wikioi.com/problem/1418/ 分析: 一看就肯定是树上的递推 设f[i][j][k]表示第i秒在k点(从j点走过来的)的概率 则f[i][j][k]=f ...

  4. 东方幻想乡/BadApple!!

    原曲:东方幻想乡/BadApple!! Vocal:nomico サークル:Alstroemeria Records 社团:Alstroemeria Records アルバム:Lovelight 专辑 ...

  5. 【洛谷】【动态规划+单调队列】P1725 琪露诺

    [题目描述:] 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精. 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪露诺决定到河 ...

  6. 洛谷P1725琪露诺【单调队列+dp】

    题目描述 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精. 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪露诺决定到河岸去追 ...

  7. UESTC 1808 琪露诺的算术教室 打表+特判(找规律)

    题目 琪露诺是个聪明的精灵,她非常擅长和数字有关的游戏 . 直到有一天灵梦进入了迷雾深林,她遇见了琪露诺,并向她提出了一个问题. 统计n个一位数字a组成的数乘以一位数b的结果中有多少个一位数字d.不超 ...

  8. mc幻想乡java_我的世界1.7.2幻想乡整合版下载_我的世界1.7.2东方幻想乡下载_游戏之家...

    游戏类型:休闲益智(50.0) 游戏语言:简体中文 游戏大小:241MB 制 作 商:暂无 发 行 商:暂无 上市时间:2016-03-25 游戏标签:轻松 适用系统:WinXP, Vista, Wi ...

  9. 第十四届蓝桥杯校内模拟赛第二期-Java个人题解(仅供参考)

    刚刚结束第十四届蓝桥杯校内模拟赛第二期,在这记录下自己的代码 不保证正确! 不保证正确! 不保证正确! 有问题一起改正!! 题解 2048 代码: package _14届模拟2;public cla ...

最新文章

  1. 微软小冰从上海音乐学院音工系毕业,师从于阳、陈世哲
  2. 1、Power View—使用前的准备
  3. Ajax.NET 作者发布支持Visual Web Developer 2005的模板安装
  4. ios整理(一)控件
  5. C语言字符篇(五)内存函数
  6. jq之animate() left font
  7. 商汤科技62篇论文入选CVPR 2019!多个竞赛项目夺冠!
  8. java系列4:数组的默认值
  9. mysql去掉重复数据只保留一条,以及取分组后的一条数据
  10. python入门指南txt-pip安装和使用入门指南
  11. 中标麒麟NeoKylin系统使用--使用UFEI安装中标麒麟系统过程中/dev/disk/by-label/NeoKylin does not exit问题的解决
  12. 《惊人的假说-灵魂的科学探索》读书笔记(1)
  13. 黑苹果音频卡顿_DXOMARK 公布无线音箱音质基准:苹果华为 Sonos 上榜
  14. 使用d2rq把mysql转化为rdf_D2RQ数据导出
  15. 网站ssl证书出现错误如何解决
  16. 显卡无法为此计算机,如何解决win10系统电脑中无法安装intel显卡驱动的问题
  17. 张成分析(spanning test):portfolio_analysis.Spanning_test
  18. c语言20s计数器,计数器延时程序与级联程序的plc梯形图实现
  19. 怎么把字母缩小当符号_iPhone自带输入法怎么用 iPhone自带输入法小技巧【详解】...
  20. 优秀课程案例:使用Scratch的画笔积木模块绘制模拟内摆线!

热门文章

  1. 七夕到了——属于程序员的浪漫
  2. ls200_红宝石-铁三角LS200is 入耳耳机测评 音质篇
  3. 怎么让textarea占满整个td高度没用_功能沙发怎么挑,也许你可以看看我这篇。...
  4. C/C++项目分享——鸣人释放技能螺旋丸
  5. mysql longblob 读取_MySQL数据库之Mysql的longblob字段插入数据问题解决
  6. 【Source教程】Crowbar下载部署与使用方法
  7. 组合逻辑毛刺消除(竞争冒险)
  8. 什么品牌的蓝牙耳机音质好?盘点四款佩戴舒适的蓝牙耳机
  9. c语言中strtod()函数的用法
  10. Futter组件整理汇总