论搜索顺序的优越性。

从小到大搜索,T到怀疑人生。

从大到小搜索,轻松AC。

双向搜索。

是这样的。我们首先排序一下,然后翻转。(当然也可以写cmp)

然后我们搜前半部分,把结果记录在某一数组中。

然后把结果排序(去重),再搜另一部分。

接下来有两种想法:

1.同样方式处理另一部分,然后双指针扫描。

2.第二次每次搜到终点,二分更新ans。

还可以加上剪枝:如果当前的和加上后面所有再加上第一部分最大值都达不到ans,剪枝。

还可以用set,但是CE了...不知道为什么。

细节顺序还可以更优,但是我不想再去烦那台可怜的评测机了.....

进步已经很明显了。

下面上代码。(最优版)

 #include <cstdio>
#include <algorithm>
const int N = ;
typedef long long LL; int n, mid, t = -;
LL a[N], b[ << ], W, ans, large, sum[N]; void DFS1(int k, LL S) {
if(S > W) {
return;
}
if(S == W) {
printf("%lld", W);
exit();
}
if(k == mid + ) {
b[++t] = S;
large = std::max(S, large);
return;
}
DFS1(k + , S);
DFS1(k + , S + a[k]);
return;
} void DFS2(int k, LL S) {
if(S > W) {
return;
}
if(S == W) {
printf("%lld", W);
exit();
}
if(large + sum[k] + S <= ans) { /// 就是这里
return;
}
if(k == n + ) {
int temp = std::upper_bound(b, b + t + , W - S) - b;
ans = std::max(ans, S + b[temp - ]);
return;
}
DFS2(k + , S + a[k]); /// 这个顺序对应上面那个剪枝。
DFS2(k + , S);
return;
} int main() {
scanf("%lld%d", &W, &n);
for(int i = ; i <= n; i++) {
scanf("%lld", &a[i]);
}
std::sort(a + , a + n + );
std::reverse(a + , a + n + );
mid = (n + ) >> ;
for(int i = n; i >= mid; i--) {
sum[i] = sum[i + ] + a[i];
}
DFS1(, );
std::sort(b, b + t + );
t = std::unique(b, b + t + ) - b - ; /// 注意reverse和unique的用法
DFS2(mid + , );
printf("%d", ans);
return ;
}

AC代码

tyvj/joyoi 1340 送礼物的更多相关文章

  1. [TYVJ2340] 送礼物 - 双向搜索

    题目限制 时间限制 内存限制 评测方式 题目来源 1000ms 131072KiB 标准比较器 Local 题目描述 作为惩罚,GY被遣送去帮助某神牛给女生送礼物(GY:貌似是个好差事)但是在GY看到 ...

  2. BZOJ_4476_[Jsoi2015]送礼物_01分数规划+单调队列

    BZOJ_4476_[Jsoi2015]送礼物_01分数规划+单调队列 Description JYY和CX的结婚纪念日即将到来,JYY来到萌萌开的礼品店选购纪念礼物. 萌萌的礼品店很神奇,所有出售的 ...

  3. CH2401 送礼物(双向dfs)

    CH2401 送礼物 描述 作为惩罚,GY被遣送去帮助某神牛给女生送礼物(GY:貌似是个好差事)但是在GY看到礼物之后,他就不这么认为了.某神牛有N个礼物,且异常沉重,但是GY的力气也异常的大(-_- ...

  4. P1340 送礼物

    时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 作为惩罚,GY被遣送去帮助某神牛给女生送礼物(GY:貌似是个好差事)但是在GY看到礼物之后,他就不这么认为了. ...

  5. 【BZOJ4476】[Jsoi2015]送礼物 分数规划+RMQ

    [BZOJ4476][Jsoi2015]送礼物 Description JYY和CX的结婚纪念日即将到来,JYY来到萌萌开的礼品店选购纪念礼物.萌萌的礼品店很神奇,所有出售的礼物都按照特定的顺序都排成 ...

  6. JSOI 2015 送礼物

    [BZOJ4476] [JSOI2015]送礼物 Description JYY和CX的结婚纪念日即将到来,JYY来到萌萌开的礼品店选购纪念礼物. 萌萌的礼品店很神奇,所有出售的礼物都按照特定的顺序都 ...

  7. [BZOJ4476] [JSOI2015] 送礼物 (01分数规划+ST表)

    [BZOJ4476] [JSOI2015] 送礼物 (01分数规划+ST表) 题面 给出n,k,l,r和序列a,要求从a中选一段连续的区间[i,j]出来,使得M(i,j)-m(i,j)/(j-i+k) ...

  8. TYVJ1340 送礼物

    P1340 送礼物 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 作为惩罚,GY被遣送去帮助某神牛给女生送礼物(GY:貌似是个好差事)但是在GY看到礼物之后 ...

  9. 「CH2401」送礼物 解题报告

    CH2401 送礼物 描述 作为惩罚,GY被遣送去帮助某神牛给女生送礼物(GY:貌似是个好差事)但是在GY看到礼物之后,他就不这么认为了.某神牛有N个礼物,且异常沉重,但是GY的力气也异常的大(-_- ...

随机推荐

  1. Docker操作删除所有容器镜像

    借鉴博客:https://www.cnblogs.com/yanyouqiang/p/8301856.html https://blog.csdn.net/wy_97/article/details/ ...

  2. 为什么js中要用void 0 代替undefined

    这个是Backbone.js中的一句源码 if (callback !== void 0 && 'context' in opts && opts.context == ...

  3. 简单比较init-method,afterPropertiesSet和BeanPostProcessor

    一.简单介绍 1.init-method方法,初始化bean的时候执行,可以针对某个具体的bean进行配置.init-method需要在applicationContext.xml配置文档中bean的 ...

  4. python 网络编程 IO多路复用之epoll

    python网络编程——IO多路复用之epoll 1.内核EPOLL模型讲解     此部分参考http://blog.csdn.net/mango_song/article/details/4264 ...

  5. 一、Dev

    一.获取选中的表格 // MessageBox.Show(gridview_Parent.GetFocusedDataRow()["series"].ToString());//获 ...

  6. Hack You CTF 2014: NotEasyTask

    exe文件,运行后闪退,peid查一下,发现是是c#写的 Reflector打开 找到Main: private static void Main(string[] args) { string ho ...

  7. html class选择器与id选择器

    class选择器: <p class="p1"> .p1{ color:red; ..... } id选择器: <p id="p2"> ...

  8. spring @Validated 注解开发中使用group分组校验

    之前知道spring支持JSR校验,在自己定义的bean中加入@NotNull,@NotBlank,@Length等之类的校验用于处理前台传递过来的request请求,避免在写多余的代码去处理. 但是 ...

  9. Membership 介绍

    ASP.NET成员资格为您提供了验证和存储用户凭据的内置方式.因此,ASP.NET成员可以帮助您管理网站中的用户身份验证.您可以使用ASP.NET表单身份验证使用ASP.NET成员身份,方法是使用AS ...

  10. hdu-1814(2-sat)

    题意:给你n个组,m条规则,每组有俩个人,这两个人不能同时出现,然后m条规则代表着有两个人,这两个人也不能同时出现,问你是否存在每组都能出现一人的选择方案 解题思路:因为这个需要字典序输出,所以只能用 ...