题面:pdf

首先排序,二分,然后怎么判定是否可行。

最简单的思路是,dp[i][j][k],到第i个,用了j次红光,k次绿光,前i个点都选上了,是否可行。然后转移就行。

然后考试的时候就想到这了,往后没想到。于是贪心,乱搞,和n^3dp拍了几千组随机数据。然后,一共90。其中贪心可得80。

上面的dp中,结果只能是0/1,于是可以考虑减掉一维,让结果表示一维。

n^2 dp:感觉挺奇妙的。f[i][j]红的用了i次,绿的用了j次,最远到什么位置。dp[i][j]=max ( P[dp[i-1][j]+1], Q[dp[i][j-1]+1] )。其中 P[k]表示使用一次红光,能从第 k 座法坛向右(正向为右)连续摧毁到第几座,Q[k]表示使用一次绿光,能从第k座法坛向右连续摧毁到第几座。 P和Q数组可以通过预处理得到。

其他的思路:f[i][j]到i,用了j次红光的时候,最少的绿光次数。

代码:

  1. /*
  2. * @Author: mjt
  3. * @Date: 2018-10-17 16:16:28
  4. * @Last Modified by: mjt
  5. * @Last Modified time: 2018-10-17 16:40:30
  6. */
  7. #include<cstdio>
  8. #include<algorithm>
  9. #include<cstring>
  10. #include<cmath>
  11. #include<iostream>
  12. #include<cctype>
  13. #include<set>
  14. #include<vector>
  15. #include<queue>
  16. #include<map>
  17. #define fi(s) freopen(s,"r",stdin);
  18. #define fo(s) freopen(s,"w",stdout);
  19. using namespace std;
  20. typedef long long LL;
  21.  
  22. inline int read() {
  23. int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
  24. for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
  25. }
  26.  
  27. const int N = ;
  28.  
  29. int a[N], P[N], Q[N], f[N][N], n, R, G;
  30.  
  31. bool check(int x) {
  32. memset(f, , sizeof(f));
  33. memset(P, , sizeof(P));
  34. memset(Q, , sizeof(Q));
  35. for (int i=; i<=n; ++i) {
  36. for (int j=i; j<=n; ++j) {
  37. if (a[j] - a[i] + <= x) P[i] = j;
  38. if (a[j] - a[i] + <= x + x) Q[i] = j;
  39. }
  40. }
  41. P[n + ] = Q[n + ] = n;
  42. for (int i=; i<=R; ++i)
  43. for (int j=; j<=G; ++j) {
  44. if (i) f[i][j] = max(f[i][j], P[f[i - ][j] + ]);
  45. if (j) f[i][j] = max(f[i][j], Q[f[i][j - ] + ]);
  46. }
  47. return f[R][G] == n;
  48. }
  49.  
  50. int main() {
  51. n = read(), R = read(), G = read();
  52. for (int i=; i<=n; ++i) a[i] = read();
  53. sort(a + , a + n + );
  54. if (R + G >= n) {
  55. cout << ; return ;
  56. }
  57. int L = , R = a[n] - a[] + , ans = R;
  58. while (L <= R) {
  59. int mid = (L + R) >> ;
  60. if (check(mid)) ans = mid, R = mid - ;
  61. else L = mid + ;
  62. }
  63. cout << ans;
  64. return ;
  65. }

2018.10.17校内模拟赛:T2神光的更多相关文章

  1. 2018.10.30 NOIp模拟赛T2 数字对

    [题目描述] 小 H 是个善于思考的学生,现在她又在思考一个有关序列的问题.        她的面前浮现出一个长度为 n 的序列{ai},她想找出一段区间[L, R](1 <= L <= ...

  2. 10.17 NOIP模拟赛

    目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...

  3. EZ 2018 06 17 NOIP2018 模拟赛(十九)

    这次的题目难得的水,但是由于许多哲学的原因,第二题题意表述很迷. 然后是真的猜题意了搞了. 不过这样都可以涨Rating我也是服了. Upt:链接莫名又消失了 A. 「NOIP2017模拟赛11.03 ...

  4. 2018.10.16 NOIP模拟赛解题报告

    心路历程 预计得分:\(100 + 100 + 20 = 220\) 实际得分:\(100 + 100 + 30 = 230\) 辣鸡模拟赛.. T1T2都是一眼题,T3考验卡常数还只有一档暴力分. ...

  5. 2018.10.29 NOIP2018模拟赛 解题报告

    得分: \(70+60+0=130\)(\(T3\)来不及打了,结果爆\(0\)) \(T1\):简单的求和(点此看题面) 原题: [HDU4473]Exam 这道题其实就是上面那题的弱化版,只不过把 ...

  6. 2018.10.03 NOIP+ 模拟赛 解题报告

    得分: \(30+5+0=35\)(考得真不咋滴) \(T1\):奥义商店(点此看题面) 以为很简单,对着这题想了一个多小时,最后果断打了个暴力交了... ... 看完题解发现其实也不是很难. 对于\ ...

  7. 2018.10.26 NOIP2018模拟赛 解题报告

    得分: \(0+10+10=20\)(\(T1\)死于假题面,\(T3\)死于细节... ...) \(P.S.\)由于原题是图片,所以我没有上传题目描述,只有数据. \(T1\):颜料大乱斗(点此看 ...

  8. 2018.10.24 NOIP2018模拟赛 解题报告

    得分: \(100+0+100=200\)(\(T2\)悲惨爆\(0\)) \(P.S.\)由于原题是图片,所以我没有上传题目描述,只有数据. \(T1\):query(点此看题面) 熟悉主席树的人都 ...

  9. 2018.02.12 noip模拟赛T2

    二兵的赌注 Description游戏中,二兵要进入了一家奇怪的赌场.赌场中有n个庄家,每个庄家都可以猜大猜小,猜一次一元钱.每一次开彩前,你都可以到任意个庄家那里下赌注.如果开彩结果是大,你就可以得 ...

随机推荐

  1. angularJs的作用域和依赖注入

    一.angularJs的作用域 &scope这是局部作用域,先在局部作用域中找,如果没有就在全局作用域中找  &rootScope这是全局作用域 <!DOCTYPE HTML&g ...

  2. linux 根据端口号查看占用进程的pid

    1.netstat -nap | grep 端口号 2.第一种的可以查看端口号对应的pid,但是会出现pid为空的情况,这种时候用:lsof -i:端口号 3.根据pid查看端口号 netstat - ...

  3. 「bzoj 4025: 二分图」

    题目 显然二分图没有奇环 于是考虑使用并查集维护一下看看是否存在奇环 我们可以考虑加权并查集,维护出\(x\)到\(fa_x\)的实际距离 由于我们只需要考虑奇偶性,于是我们处理出到根的路径异或一下就 ...

  4. python沙箱逃逸的几道题

    第一道 from __future__ import print_function print("Welcome to my Python sandbox! Enter commands b ...

  5. 面试准备——(五)Jmeter

    面试中遇到的问题: 1. 如何使用Jmeter进行并发测试 2. 如何设置并发量为1000 3. 如果http请求每个都不一样,如何配置 4. 如何设置sessionID 一.安装配置 1. 在Ter ...

  6. linux内核中socket的创建过程源码分析(总结性质)

    在漫长地分析完socket的创建源码后,发现一片浆糊,所以特此总结,我的博客中同时有另外一篇详细的源码分析,内核版本为3.9,建议在阅读本文后若还有兴趣再去看另外一篇博文.绝对不要单独看另外一篇. 一 ...

  7. nRF5 SDK for Mesh(八) Exploring Mesh APIs using light switch example,使用 灯开关 案例探索BLE mesh 的APIS

    Exploring Mesh APIs using light switch example The light switch example is meant to showcase the API ...

  8. Java中的监听器

    servlet的技术规范包括三个:servlet,listener,filter,今天记录一下listener的学习. 监听器就是监听某个对象的状态变化的技术.监听器包括事件源,监听器,注册监听器以及 ...

  9. 三、Shiro授权开发

    Shiro 支持三种方式的授权: I. 编程式:通过写if/else 授权代码块完成: Subject subject =SecurityUtils.getSubject(); if(subject. ...

  10. ORA-28002 密码过期解决方案

    ORA-28002 密码过期解决方案 错误场景:当使用sqlplus进行登录时报错:ORA-28002 密码过期.错误原因:由于oracle 11g 在默认在default概要文件中设置了密码过期天数 ...