伪紫题p5194 天平(dfs剪枝)
这题作为一个紫题实在是过分了吧。。。
绿的了不起了。
——————————————————————————
看题第一眼,01背包无误。2min打好一交全屏紫色(所以这就是这题是紫色的原因233?)
re原因:即使压掉一维,dp数组的下标也有1e10 * 2 以上,不MLE就不错了。
肯定是动态规划一类的东西了。根据题目这一句话:这一行中从第3个砝码开始,每个砝码的质量至少等于前面两个砝码(也就是质量比它小的砝码中
质量最大的两个)的质量的和。是不是很像斐波那契?于是推出来:n的真实值其实也很小,大约在30左右吧。但是朴素搜索也会原地爆裂。
怎么剪枝呢?大约有三个剪枝。
#1:输入的时候,如果当前的重量已经大于限制了,就停止,把砝码总数重新定义。
#2:题目里所有的砝码都是单调递增的,所以不会出现去掉前面某一个砝码然后取后面一个来找到最大值(可能表述有些问题,或者我根本理解错了,欢迎指正)所以维护一个前缀和,如果这个能拿,就把前面的全都拿了(或者说当前的砝码一定大于等于前面所有的砝码重量和)
#3:因为找最大,所以从后往前搜索。
大概就是这样。
#include<bits/stdc++.h>
//变量解释:a数组存题目给定值,b数组为前缀和数组,n为砝码数量,m为限制重量
using namespace std;
const int maxn=500005;
int n,m;
long long ans,a[maxn],b[maxn];
void dfs(int now,long long ma)//当前砝码序号和最大值
{
if(ma+b[now]<=ans)//剪枝#2
return;
ans=max(ans,ma);
for(int i=now;i;i--)//剪枝#3
if(ma+a[i]<=m)
dfs(i-1,ma+a[i]);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
if(a[i]>m)
{
n=i-1;//剪枝#1
break;
}
b[i]=b[i-1]+a[i];//剪枝#2
}
dfs(n,0);
printf("%lld",ans);
return 0;
}
应该就是这样吧。。。
(完)
伪紫题p5194 天平(dfs剪枝)的更多相关文章
- 数据结构与算法实验题 9.1 K 歌 DFS+剪枝
数据结构与算法实验题 K 歌 ★实验任务 3* n 个人(标号1~ 3 * n )分成 n 组 K 歌.有 m 个 3 人组合,每个组合都对应一个分数,你能算出最大能够得到的总分数么? ★数据输入 输 ...
- BZOJ1306 [CQOI2009]match循环赛/BZOJ3139 [Hnoi2013]比赛[dfs剪枝+细节题]
地址 看数据范围很明显的搜索题,暴力dfs是枚举按顺序每一场比赛的胜败情况到底,合法就累计.$O(3^{n*(n-1)/2})$.n到10的时候比较大,考虑剪枝. 本人比较菜所以关键性的剪枝没想出来, ...
- POJ 3009 DFS+剪枝
POJ3009 DFS+剪枝 原题: Curling 2.0 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16280 Acce ...
- poj 1724:ROADS(DFS + 剪枝)
ROADS Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10777 Accepted: 3961 Descriptio ...
- DFS(剪枝) POJ 1011 Sticks
题目传送门 /* 题意:若干小木棍,是由多条相同长度的长木棍分割而成,问最小的原来长木棍的长度: DFS剪枝:剪枝搜索的好题!TLE好几次,终于剪枝完全! 剪枝主要在4和5:4 相同长度的木棍不再搜索 ...
- HDU 5937 Equation 【DFS+剪枝】 (2016年中国大学生程序设计竞赛(杭州))
Equation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- poj 1011 Sticks (DFS+剪枝)
Sticks Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 127771 Accepted: 29926 Descrip ...
- dfs+剪枝:poj2362
贴题目 Square Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 24604 Accepted: 8449 Descr ...
- PKU 2531 Network Saboteur(dfs+剪枝||随机化算法)
题目大意:原题链接 给定n个节点,任意两个节点之间有权值,把这n个节点分成A,B两个集合,使得A集合中的每一节点与B集合中的每一节点两两结合(即有|A|*|B|种结合方式)权值之和最大. 标记:A集合 ...
随机推荐
- 直通BAT面试题库锦集
01 python面试题(汇总) 02 面向对象 03 网络和并发编程 04 模块 05 设计模式 06 前端 07 Django框架 08 Flask 09 tornado 10 DB
- 为什么一个Http Header中的空格会被骇客利用 - HTTP request smuggling
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- 04-10 Bagging和随机森林
目录 Bagging算法和随机森林 一.Bagging算法和随机森林学习目标 二.Bagging算法原理回顾 三.Bagging算法流程 3.1 输入 3.2 输出 3.3 流程 四.随机森林详解 4 ...
- ThoughtWorks 面试三连挂,以后再也不去了
先说我吧,之前在外企呆过两年,那时Team的很多同事都去了ThoughtWorks,所以有一种情怀,只要有机会我就去面试...之前在Team里对我的评价也很高(不是我说的),现在也是公司的技术总监,总 ...
- Uber Go 语言编程规范
目录 Uber Go 语言编程规范 1. 介绍 2. 编程指南 3. 性能相关 4. 编程风格 5. 编程模式(Patterns) 6. 总结 Uber Go 语言编程规范 相信很多人前两天都看到 U ...
- 实验吧之【Forms、天网管理系统】
Forms 原题链接 http://ctf5.shiyanbar.com/10/main.php Form 其实是个提示,代表html表单 F12 查看源码,发现 <input name=&qu ...
- 后台模板引擎ejs与前台模板引擎artTemplate的简单介绍
动态网页是指前端页面当中的数据内容来源于后台数据库,前端的html代码会随着后台数据的变化而变化,是动态生成的.制作动态网页有两种方式,一种方式是在后台拿到前端的html模板,利用后台模板引擎(如ej ...
- luogu P3878 [TJOI2010]分金币
[返回模拟退火略解] 题目描述 今有 nnn 个数 {ai}\{a_i\}{ai},把它们分成两堆{X},{Y}\{X\},\{Y\}{X},{Y},求一种分配使得∣∑i∈Xai−∑i∈Yai∣|\ ...
- ArraryList源码解读
先由一道题引发思考: ArrayList list = new ArrayList(20);中的list扩充几次() A 0 B 1 C 2 D 3 答案:A 直接翻看 jd ...
- 虚拟机Ubuntu系统无法连接网络解决方案
宿主机连接wifi,虚拟机无法联网 查看是否有网络图标 操作一: sudo service network-manager stopsudo rm /var/lib/NetworkManager/Ne ...