tyvj/joyoi 1340 送礼物
论搜索顺序的优越性。
从小到大搜索,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 送礼物的更多相关文章
- [TYVJ2340] 送礼物 - 双向搜索
题目限制 时间限制 内存限制 评测方式 题目来源 1000ms 131072KiB 标准比较器 Local 题目描述 作为惩罚,GY被遣送去帮助某神牛给女生送礼物(GY:貌似是个好差事)但是在GY看到 ...
- BZOJ_4476_[Jsoi2015]送礼物_01分数规划+单调队列
BZOJ_4476_[Jsoi2015]送礼物_01分数规划+单调队列 Description JYY和CX的结婚纪念日即将到来,JYY来到萌萌开的礼品店选购纪念礼物. 萌萌的礼品店很神奇,所有出售的 ...
- CH2401 送礼物(双向dfs)
CH2401 送礼物 描述 作为惩罚,GY被遣送去帮助某神牛给女生送礼物(GY:貌似是个好差事)但是在GY看到礼物之后,他就不这么认为了.某神牛有N个礼物,且异常沉重,但是GY的力气也异常的大(-_- ...
- P1340 送礼物
时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 作为惩罚,GY被遣送去帮助某神牛给女生送礼物(GY:貌似是个好差事)但是在GY看到礼物之后,他就不这么认为了. ...
- 【BZOJ4476】[Jsoi2015]送礼物 分数规划+RMQ
[BZOJ4476][Jsoi2015]送礼物 Description JYY和CX的结婚纪念日即将到来,JYY来到萌萌开的礼品店选购纪念礼物.萌萌的礼品店很神奇,所有出售的礼物都按照特定的顺序都排成 ...
- JSOI 2015 送礼物
[BZOJ4476] [JSOI2015]送礼物 Description JYY和CX的结婚纪念日即将到来,JYY来到萌萌开的礼品店选购纪念礼物. 萌萌的礼品店很神奇,所有出售的礼物都按照特定的顺序都 ...
- [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) ...
- TYVJ1340 送礼物
P1340 送礼物 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 作为惩罚,GY被遣送去帮助某神牛给女生送礼物(GY:貌似是个好差事)但是在GY看到礼物之后 ...
- 「CH2401」送礼物 解题报告
CH2401 送礼物 描述 作为惩罚,GY被遣送去帮助某神牛给女生送礼物(GY:貌似是个好差事)但是在GY看到礼物之后,他就不这么认为了.某神牛有N个礼物,且异常沉重,但是GY的力气也异常的大(-_- ...
随机推荐
- Collections斗地主案例
package com.zhangxueliang.doudizhu; import java.util.ArrayList; import java.util.Collections; public ...
- 补充:pyhton 2 和3中的beyts类型
在python2里,bytes == str python2里还有个单独的类型是unicode , 把字符串解码后,就会变成unicode. 既然python2中byets == str,那为什么还要 ...
- SAP配置BOM的适用范围
配置BOM中定义属性,单纯的编码要搞死人: 适合小批量周期短多品种
- chrome中 GET /undefined 404
Chrome中调试网站,会出现 这是由 crxMouse Chrome™ 手势 引起的,关闭即可
- luogu3702-[SDOI2017]序列计数
Description Alice想要得到一个长度为nn的序列,序列中的数都是不超过mm的正整数,而且这nn个数的和是pp的倍数. Alice还希望,这nn个数中,至少有一个数是质数. Alice想知 ...
- 【C/C++】求解线性方程组的雅克比迭代与高斯赛德尔迭代
雅克比迭代: /* 方程组求解的迭代法: 雅克比迭代 */ #include<bits/stdc++.h> using namespace std; ][]; ]; void swapA( ...
- Codeforces Round #470 Div. 1
A:暴力枚举x2的因子,由此暴力枚举x1,显然此时减去其最大质因子并+1即为最小x0. #include<iostream> #include<cstdio> #include ...
- 洛谷P1550打井
打井 题目 该题是一个最小生成树的好题,但是比起一般的最小生成树来说他不仅仅有各个井相连,而且还要和地下水相连,所以地下水我们也可以看成一口井. 代码 #include <bits/stdc++ ...
- 【BZOJ4042】【CERC2014】parades 状压DP
题目大意 给你一棵\(n\)个点的树和\(m\)条路径要求你找出最多的路径,使得这些路径不共边.特别的,每个点的度数\(\leq 10\). \(n\leq 1000,m\leq \frac{n(n- ...
- nginx+php使用open_basedir限制站点目录防止跨站
以下三种设置方法均需要PHP版本为5.3或者以上.方法1)在Nginx配置文件中加入 fastcgi_param PHP_VALUE "open_basedir=$document_root ...