论搜索顺序的优越性。

从小到大搜索,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. Collections斗地主案例

    package com.zhangxueliang.doudizhu; import java.util.ArrayList; import java.util.Collections; public ...

  2. 补充:pyhton 2 和3中的beyts类型

    在python2里,bytes == str python2里还有个单独的类型是unicode , 把字符串解码后,就会变成unicode. 既然python2中byets == str,那为什么还要 ...

  3. SAP配置BOM的适用范围

    配置BOM中定义属性,单纯的编码要搞死人: 适合小批量周期短多品种

  4. chrome中 GET /undefined 404

    Chrome中调试网站,会出现 这是由 crxMouse Chrome™ 手势 引起的,关闭即可

  5. luogu3702-[SDOI2017]序列计数

    Description Alice想要得到一个长度为nn的序列,序列中的数都是不超过mm的正整数,而且这nn个数的和是pp的倍数. Alice还希望,这nn个数中,至少有一个数是质数. Alice想知 ...

  6. 【C/C++】求解线性方程组的雅克比迭代与高斯赛德尔迭代

    雅克比迭代: /* 方程组求解的迭代法: 雅克比迭代 */ #include<bits/stdc++.h> using namespace std; ][]; ]; void swapA( ...

  7. Codeforces Round #470 Div. 1

    A:暴力枚举x2的因子,由此暴力枚举x1,显然此时减去其最大质因子并+1即为最小x0. #include<iostream> #include<cstdio> #include ...

  8. 洛谷P1550打井

    打井 题目 该题是一个最小生成树的好题,但是比起一般的最小生成树来说他不仅仅有各个井相连,而且还要和地下水相连,所以地下水我们也可以看成一口井. 代码 #include <bits/stdc++ ...

  9. 【BZOJ4042】【CERC2014】parades 状压DP

    题目大意 给你一棵\(n\)个点的树和\(m\)条路径要求你找出最多的路径,使得这些路径不共边.特别的,每个点的度数\(\leq 10\). \(n\leq 1000,m\leq \frac{n(n- ...

  10. nginx+php使用open_basedir限制站点目录防止跨站

    以下三种设置方法均需要PHP版本为5.3或者以上.方法1)在Nginx配置文件中加入 fastcgi_param PHP_VALUE "open_basedir=$document_root ...