BZOJ 1673 [Usaco2005 Dec]Scales 天平:dfs 启发式搜索 A*搜索
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1673
题意:
有n个砝码(n <= 1000),重量为w[i]。
你要从中选择一些砝码,使得这些砝码的总重量最大,但不超过c。
w[i]按递增顺序给出,并且保证w[i] >= w[i-1]+w[i-2] (i >= 3)。
题解:
dfs。
因为w[i] >= w[i-1]+w[i-2],所以其实n最大只有45左右(类似斐波那契数列)。
优化:
(1)启发式:优先选砝码(不跳过),并且优先选重量大的砝码,尽早更新ans。
(2)A*搜索:如果当前tot + 剩下砝码的总重(前缀和) < ans,则return。
AC Code:
1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 #define MAX_N 1005 5 6 using namespace std; 7 8 int n,c; 9 int ans=0; 10 int w[MAX_N]; 11 long long sum[MAX_N]; 12 13 void dfs(int col,int tot) 14 { 15 if(tot>c) return; 16 ans=max(ans,tot); 17 if(col>n) return; 18 if(tot+sum[n]-sum[col-1]<=ans) return; 19 dfs(col+1,tot+w[col]); 20 dfs(col+1,tot); 21 } 22 23 void read() 24 { 25 cin>>n>>c; 26 for(int i=n;i>=1;i--) 27 { 28 cin>>w[i]; 29 } 30 } 31 32 void solve() 33 { 34 sum[0]=0; 35 for(int i=1;i<=n;i++) 36 { 37 sum[i]=sum[i-1]+w[i]; 38 } 39 dfs(1,0); 40 } 41 42 void print() 43 { 44 cout<<ans<<endl; 45 } 46 47 int main() 48 { 49 read(); 50 solve(); 51 print(); 52 }
转载于:https://www.cnblogs.com/Leohh/p/7634313.html
BZOJ 1673 [Usaco2005 Dec]Scales 天平:dfs 启发式搜索 A*搜索相关推荐
- bzoj 1673: [Usaco2005 Dec]Scales 天平(DFS)
1673: [Usaco2005 Dec]Scales 天平 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 695 Solved: 253 [Subm ...
- bzoj 1671: [Usaco2005 Dec]Knights of Ni 骑士(BFS)
1671: [Usaco2005 Dec]Knights of Ni 骑士 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 416 Solved: 26 ...
- bzoj 1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚(DP)
1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 941 Solved ...
- bzoj 1671: [Usaco2005 Dec]Knights of Ni 骑士
题目链接 题目背景: 贝茜遇到了一件很麻烦的事:她无意中闯入了森林里的一座城堡,如果她想回家,就必须穿过这片由骑士们守护着的森林.为了能安全地离开,贝茜不得不按照骑士们的要求,在森林寻找一种特殊的灌木 ...
- bzoj 1731 [Usaco2005 dec]Layout 排队布局——差分约束
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1731 对差分约束理解更深.还发现美妙博客:http://www.cppblog.com/me ...
- bzoj 1731: [Usaco2005 dec]Layout 排队布局【差分约束】
差分约束裸题,用了比较蠢的方法,先dfs_spfa判负环,再bfs_spfa跑最短路 注意到"奶牛排在队伍中的顺序和它们的编号是相同的",所以\( d_i-d_{i-1}>= ...
- BZOJ 3391: [Usaco2004 Dec]Tree Cutting网络破坏(搜索)
这道直接遍历一遍求出每个点的子节点数目就行了= = CODE: #include<cstdio> #include<iostream> #include<algorith ...
- 1671: [Usaco2005 Dec]Knights of Ni 骑士
1671: [Usaco2005 Dec]Knights of Ni 骑士 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 351 Solved: 22 ...
- 【八数码问题】基于状态空间法的知识表示与状态搜索:无信息搜索(BFS/DFS) 启发式搜索(A*)
前言 一.问题引入 二.状态空间法 1. 知识及其表示 2. 状态空间法定义 3. 问题求解 三.基于状态空间搜索法解决八数码问题 1. 八数码问题的知识表示 2. 状态空间图搜索 1. 无信息搜索 ...
最新文章
- Linux下安装Oracle11g服务器(centos7下)
- 【从零学习OpenCV 4】Image Watch插件的使用
- 当前(2019年)机器学习中有哪些研究方向特别的坑?
- IOS开发错误library not found for -lXXX
- 英特尔宣布McAfee成为独立的安全公司
- SQL存储过程解密研究
- Python之pandas:对pandas中dataframe数据中的索引输出、修改、重命名等详细攻略
- 前端学习(2181):vue-router导航守卫的补充
- java 二叉树特点_疯狂java笔记之树和二叉树
- 多站点IIS的架设:端口法
- linux配置sftp-server,Ubuntu Server如何配置SFTP(建立用户监狱)
- 使用RIP协议处理不连续的子网和VLSM(一)
- fatal exception java_java.lang.IllegalStateExceptio
- CME比特币期货去年促成超1100万枚比特币交易量
- 程序集与托管模块的概念
- 微信 8.0 来啦,炸裂!
- 几种降维思想方法总结
- PHP调试工具 - FirePHP安装与使用方法
- angular8封装http服务
- hive drop表恢复手册
热门文章
- es java bulk 导入数据一直超时_亿级别记录的mongodb批量导入ElasticSearch的java代码完整实现...
- android马赛克代码,android图片马赛克 mosaic
- 多时隙编码aloha(MuSCA)与编码时隙aloha(CSA)协议分析
- 拓扑排序----Kahn算法和字典序最小的拓扑排序
- 数据库实验7 数据库视图的定义与使用
- 文件包含漏洞的审计(审计思路)
- VS2012全屏背景修改教程
- [PyTorch] reverse the normalization
- 吴恩达神经网络和深度学习-学习笔记-11-Momentum梯度下降法
- Echarts数据可视化echarts实例的相关操作,开发全解+完美注释