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的力气也异常的大(-_- ...
随机推荐
- Eclipse中修改jsp、html……的编码格式
一般如果使用的是Eclipse的默认编码格式,在我们保存的时候会提示选择保存的编码格式,保存后英文没有问题,但是中文就会乱码. 修改方式是: Windows——>Preferences——> ...
- python爬虫之win7Mongod安装使用
1.下载地址:https://www.mongodb.com/download-center#community 下载完成以后下一步下一步安装. 安装路径 还需要建立一个数据库存储位置C:\mongo ...
- 排查 Maxwell can not find database 并且使用 MySQL binlog 解决相关问题
目前我们在使用 Maxwell 在读线上机器的 binlog 同步我们的离线数据库. 这次错误定位上,首先线要确定问题是发生在生产者 还是队列 还是消费者.经过查看各机器上任务的运行日志,定位到了问题 ...
- tomcat 与 nginx,apache的区别
tomcat 与 nginx,apache的有什么区别 回答一: 题主说的Apache,指的应该是Apache软件基金会下的一个项目——Apache HTTP Server Project:Nginx ...
- python requests上传文件 tornado 接收文件
requests 上传文件 import requests def images(): url = 'http://127.0.0.1:8889/upload/image' files = {'fil ...
- jQuery 操作Cookie
一个轻量级的cookie 插件,可以读取.写入.删除 cookie. 下载地址:http://plugins.jquery.com/cookie/ (在实际中可以用这个保存cookie保存用户的习惯, ...
- js 中常用的循环
参考文章: 1.js几种数组遍历方式以及性能分析对比 2.javaScript遍历对象.数组总结 首先是数组中可以使用的 1.for 循环 for (let i = 0; i < xxx.len ...
- BZOJ2809 dispatching 【可并堆】
题目分析: yy一下就知道了,合并用可并堆少个log. 代码: #include<bits/stdc++.h> using namespace std; ; int n,m; int b[ ...
- 洛谷P1007独木桥题解
题目 这个题看起来很难,但是只要理解了题目,一切都显得简单. 你只需想象出来每个人在碰撞之后仅仅是交换了灵魂, 这样一来,代码就好写了. 附代码: #include<iostream> # ...
- Matplotlib学习---用matplotlib画直方图/密度图(histogram, density plot)
直方图用于展示数据的分布情况,x轴是一个连续变量,y轴是该变量的频次. 下面利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://d ...