挺好的一道DP。

 /* 2217 */
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std; #define MAXN 2005
#define MAXM 100005 int lt[MAXN], rt[MAXN];
int ldp[MAXM], rdp[MAXM];
int ln, rn, zn; int main() {
int n, t;
int i, j, k, tmp;
int ans; #ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
#endif while (scanf("%d %d", &n, &t) != EOF) {
ln = rn = ;
zn = ;
lt[] = ;
rt[] = ;
for (i=; i<n; ++i) {
scanf("%d", &k);
if (k > )
rt[rn++] = k;
else if (k < )
lt[ln++] = -k;
else
++zn;
} rt[] = ;
lt[] = ;
sort(rt, rt+rn);
sort(lt, lt+ln);
ldp[] = ;
rdp[] = ; k = ;
for (i=; i<ln; ++i) {
for (j=lt[i-]; j<lt[i]; ++j)
ldp[j] = k;
++k;
ldp[j] = k;
} k = ;
for (i=; i<rn; ++i) {
for (j=rt[i-]; j<rt[i]; ++j)
rdp[j] = k;
++k;
rdp[j] = k;
} ans = -;
// go left and back to right
for (i=; i<=lt[ln-]; ++i) {
if (t < i)
break;
k = t-(i+i);
if (k < )
k = ;
if (k > rt[rn-])
k = rt[rn-]; ans = max(ans, ldp[i]+rdp[k]);
}
// go right and back to left
for (i=; i<=rt[rn-]; ++i) {
if (t < i)
break;
k = t-(i+i);
if (k < )
k = ;
if (k > lt[ln-])
k = lt[ln-]; ans = max(ans, rdp[i]+ldp[k]);
}
// go zero point first
ans += zn; printf("%d\n", ans);
} return ;
}

【HDOJ】2217 Visit的更多相关文章

  1. 【HDOJ】4729 An Easy Problem for Elfness

    其实是求树上的路径间的数据第K大的题目.果断主席树 + LCA.初始流量是这条路径上的最小值.若a<=b,显然直接为s->t建立pipe可以使流量最优:否则,对[0, 10**4]二分得到 ...

  2. 【HDOJ】4418 Time travel

    1. 题目描述K沿着$0,1,2,\cdots,n-1,n-2,n-3,\cdots,1,$的循环节不断地访问$[0, n-1]$个时光结点.某时刻,时光机故障,这导致K必须持续访问时间结点.故障发生 ...

  3. 【HDOJ】4351 Digital root

    digital root = n==0 ? 0 : n%9==0 ? 9:n%9;可以简单证明一下n = a0*n^0 + a1*n^1 + ... + ak * n^kn%9 = a0+a1+..+ ...

  4. 【HDOJ】4322 Candy

    状态DP显然可以解,发现T了,不知道优化后能不能过.然后发现费用流可以解.trick是对need拆解成need/K, need%K两种情况讨论. /* 4312 */ #include <ios ...

  5. 【HDOJ】5296 Annoying problem

    LCA+RMQ.挺不错的一道题目. 思路是如何通过LCA维护费用.当加入新的点u是,费用增量为dis[u]-dis[lca(u, lower_u)] - dis[lca(u, greater_u)] ...

  6. 【HDOJ】3948 The Number of Palindromes

    后缀数组求不重复回文子串数目.注意dp数组. /* 3948 */ #include <iostream> #include <sstream> #include <st ...

  7. 【HDOJ】4775 Infinite Go

    其实是一道模拟题,并查集用来优化.还可以的一道题目. /* 4775 */ #include <iostream> #include <sstream> #include &l ...

  8. 【HDOJ】2242 考研路茫茫——空调教室

    tarjan缩点,然后树形dp一下可解.重点是重边的处理. /* 2242 */ #include <iostream> #include <sstream> #include ...

  9. 【HDOJ】1518 Square

    DFS+剪枝.与HDOJ 1455如出一辙. #include <stdio.h> #include <stdlib.h> #include <string.h> ...

随机推荐

  1. qt 工具栏和菜单栏

    在前面的QMainWindow的基础之上,我们开始着手建造我们的应用程序.虽然现在已经有一个框架,但是,确切地说我们还一行代码没有写呢!下面的工作就不那么简单了!在这一节里面,我们要为我们的框架添加菜 ...

  2. async 与 await异步编程活用基础

    [本文转自:http://www.cnblogs.com/x-xk/archive/2013/06/05/3118005.html  作者:肅] 好久没写博客了,时隔5个月,奉上一篇精心准备的文章,希 ...

  3. java的继承机制

    这次我想深入探究以下java里类的继承机制.       我们知道,继承是java设计里的一个失败的地方.高司令说过:如果让他重新设计java的话,他会把继承去掉.而java里继承到底怎么了,会这么不 ...

  4. MySQL(10):实体、实体表和外键(foreign key)

    1.实体        数据库管理系统中的各种用于数据管理方便而设定的各种数据管理对象,如:数据库表.视图.存储过程等都是数据库实体.广义上讲,这些对象中所存储的数据也是数据库实体.因为它们也是确切存 ...

  5. setTimeout 方法用于在指定的毫秒数后调用函数或计算表达式

    setTimeout 方法用于在指定的毫秒数后调用函数或计算表达式

  6. js自定义方法名

    自定义方法名: <script language="javascript" type="text/javascript">window.onload ...

  7. PTHREAD_MUTEX_INITIALIZER问题

      PTHREAD_MUTEX_INITIALIZER 与 expected expression before ‘{’ token 在进行 Posix thread 编程时,出现以下编译错误:err ...

  8. (转)Linux内核之进程和系统调用

    Linux内核之进程和系统调用 什么是系统调用 在Linux的世界里,我们经常会遇到系统调用这一术语,所谓系统调用,就是内核提供的.功能十分强大的一系列的函数.这些系统调用是在内核中实现的,再通过一定 ...

  9. android 数字键盘制作

    //布局相关<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android ...

  10. Premature optimization is the root of all evil.

    For all of we programmers,we should always remember that "Premature optimization is the root of ...